【第12天】python全栈从入门到放弃
2019-08-08 本文已影响0人
36140820cbfd
1.函数传递多个位置参数,求他们的和
代码块
def func(*args):
sum=0
for i in args:
sum=sum+i
return sum
#实例化
print(func(*(1,3,4,5,67))) #用*把元组打散
2. nonlocal的应用
代码块
def func():
a=1
print(a)
def func2():
nonlocal a
a=6
print(a)
print(a)
func2()
print(a)
func()
#1 1 6 6
3.写一个函数,接收n个参数. 返回最大值和最小值。
第一种方法
代码块:第一种方法
def func(*args):
print('最大值是%d,最小值是%d'%(max(args),min(args)))
func(1,2,3,55,7)
第二种方法:
代码块:第二种方法
def func(*agrs):
maxvalue=agrs[0]
minvalue=agrs[0]
for i in agrs:
if i >maxvalue:
maxvalue=i
if i < minvalue:
minvalue=i
print('最大值是%d,最小的是%d'%(maxvalue,minvalue))
func(1,2,3,45,56,12,44)
4.利用笛卡尔乘积,将一副扑克牌以元组的形式添加到一个列表中
代码块
color=['红桃','黑桃','方片','梅花']
num=['1','2','3','4','5','6','7','8','9','10','J','Q','K']
res=[]
for i in color:
for m in num:
res.append((i,m))
print(res)
5.如果默认值参数是一个可变的数据类型, 如果有人调用的时候改变了他. 其他位置看到的也跟着改变了
代码块
def func(value,list=[]):
list.append(value)
return list
a=func(1)
print(a) #[1]
b=func(2,[])
print(b) #[2]
c=func(666)
print(c) #[1, 666]
print(a) #[1, 666] 思考,为什么此时a也变化了?
6.打印1个99乘法口诀表
代码块
a=1
while a<=9:
b=1
while b<=a:
print('%d*%d=%d'%(b,a,a*b),end='')
b+=1
print('')
a+=1
7.函数名的应用
1.赋值
2.作为list元素
3.作为参数
4.作为返回值
8.闭包(内部函数访问外部函数的局部变量.)
1.安全,因为全局变量暴露不安全
2.常驻内存. 提高效率
9. 迭代器和可迭代对象
可迭代对象(Iterable):内部包含iter(),没有next()
迭代器(Iterator): 内部含有iter() next()
str, list, tuple, set, dict,f,range都是可迭代对象,都可以使用for循环遍历内容
其中f也是迭代器
迭代器好处
迭代器的特点:
1.省内存
2.惰性机制
3.只能向前.
10. 可以把函数作为参数, 传递给另一个函数
代码块
def func(a):
a()
def func1():
print('我是一个函数')
return func1
func(func1)
11.闭包
代码块
def func():
name='wangsiyu'
def func2():
print('我是%s'%name) #内层函数调用外层函数的变量就是闭包,常驻内存,更安全。
return func2
res=func()
res() #相当于执行的是func2()
12.闭包的例子
代码块
from urllib.request import urlopen
def func():
content=urlopen('http://www.h3c.com/cn').read()
def func2():
return content #闭包,调用了外层函数的变量。
print(func2.__closure__) #查看func2()是否闭包
return func2
a=func() #开始加载网页内容、
print(a()) #获取网页内容,是html文件
12. dir()来查看一个对象,数据类型中包含了哪些方法
代码块
a=[1,2,3,4]
b=(1,2,3,4,77)
# print(dir(a))
print('sort' in dir(a)) #查看对象a中是否有‘sort’这个方法
print('__iter__' in dir(a))
print('helle' in dir(a))
13怎样获取可迭代对象的迭代器
代码块
name=['wangsiyu','zhangdejun','zhaochongchng','gongxudong']
a=name.__iter__() #获取到可迭代对象的迭代器
#用迭代器来拿元素,每次一个
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__()) #第四次打印'gognxudong',再往后面就开始报错了。
14. 用列表来模拟一个for循环
代码块
lst=['hello','worled','wangsiyu'] #这是一个可迭代对象,但是不是迭代器。
it=lst.__iter__() #拿到迭代器,利用循环,就可以遍历
while 1:
try:
print(it.__next__())
except:
break
15. 导入模块包iterable和iterator来判断是否是迭代器
代码块
from collections import Iterable
from collections import Iterator
a=[1,2,3]
b=123
#isinstance(对象,类型) 判断某个对象是不是某个类型
print(isinstance(a,Iterable)) #True
print(isinstance(a,Iterator)) #Fales
print(isinstance(b,Iterable)) #Fales
print(isinstance(b,Iterator)) #Fales
别跑,点个赞再走