一、 函数
1. 函数的嵌套
1 def huangwei(): #函数不能里面执行不执行外面
2 name = 'huang'
3 print(name)4
5 defliuyang():6 name = 'liuyang'
7 print(name)8
9 defnulige():10 name = 'fahsfha'
11 print(name)12
13 print(name)14 nulige()15 returnnulige16
17 liuyang()18 print(name)19 return liuyang
(1) 仅仅是 huangwei() 顺序为1-2-3-17-5-6-7-13-14-9-10-11-15-18-19
(2) huangwei() = liuyang 所以要运行liuyang 应为 huangwei()()
(3)huangwei()() = nulige 所以要运行努力哥应为 huangwei()()()
2. 函数的自循环
1 person_list = ['a', 'b', 'v', 'd', 'vd']2
3 defask_way(person_list):4 print('-' * 60)5 if person_list ==0:6 return '根本没人知道'
7 person =person_list.pop(0)8 if person == 'd':9 return '那条路是。。。。。'
10 print('hi %s ,你知道xx 路吗' %person)11 print('%s 我不知道 我帮你问问 %s' %(person, person_list))12 importtime13 time.sleep(0) #time 要先import
14 res =ask_way(person_list)15 returnres16 """------------------------------------------------------------17 hi a ,你知道xx 路吗18 a 我不知道 我帮你问问 ['b', 'v', 'd', 'vd']19 ------------------------------------------------------------20 hi b ,你知道xx 路吗21 b 我不知道 我帮你问问 ['v', 'd', 'vd']22 ------------------------------------------------------------23 hi v ,你知道xx 路吗24 v 我不知道 我帮你问问 ['d', 'vd']25 ------------------------------------------------------------26 那条路是。。。。。27 """
3. lambda 函数
(1)匿名函数 一般和其他函数联合使用lambda x:x+1: x 为形参,x+1是返回值
(2)函数式编程,函数体内不应该有任何的赋值操作 ,没有变量的定义
4. 参数
*args: 数组形式
**kvArgs:字典形式
def printInfo(name, *args):#打印任何传入的字符串
print("name is:", name)for arg inargs:print(arg)#没有返回值
return
#正确调用
printInfo("KEN", 20, "男", 178, "70KG", 'abc')#name is: KEN 20 男 178 70KG abc
#可变长参数的函数--kv方式
def printInfo(name, **kvArgs):#打印任何传入的字符串
print("name is:", name)for k inkvArgs:print(k, "is:", kvArgs[k])#没有返回值
return
#正确调用
printInfo("KEN", age=20, sex="男", height="178", weight="70KG")"""name is: KEN
age is: 20
sex is: 男
height is: 178
weight is: 70KG"""
二、迭代
y = x.__iter__() 将x 转换为可迭代对象,可以转换为迭代器
y.__next__()/ next(y) 进行迭代每一项元素的输出 ,一行代码输出一个, 如果太多了超出范围 会报错
yield 函数的yield 相当于return 但是return 只能执行一次, yield 可以执行多次
deftest():yield S #yield 相当于return
yield 1
yield 2
yield 3 #yield 可以执行多次 ,但是return 只能执行一次
g =test()print(g)print((g.__next__()))print((g.__next__()))print((g.__next__()))print((g.__next__()))#结果##{1, 2, 3}#1#2#3
yield 可以保留函数的运行状态
defproduct_baozi():for i in range(100):print('正在生产包子')yield '一屉包子%s' %iprint('正在卖包子')
pro_b=product_baozi()print('-----')
chibz= pro_b.__next__() #正在生产包子
print('来了一个人吃包子',chibz) #来了一个人吃包子 一屉包子0
chibz = pro_b.__next__() #正在卖包子 正在生产包子 yield值已经产生了
print('来了一个人吃包子',chibz) #来了一个人吃包子 一屉包子1 输出yield 值
chibz = pro_b.__next__() #正在卖包子 正在生产包子
print('----')
chibz= pro_b.__next__() #yield 可以保留函数的运行状态
三元表达式生成迭代器:
laobuji = ('鸡蛋%s' %i for i in range(10)) #该成括号可以一个一个迭代#这是一个生成器表达式,直接形成了迭代器协议
print(laobuji.__next__())