函数参数传递的是内存地址【引用】。1.函数的定义函数传参方式分为两种位置形式传参 关键字传参。其中前者打包为元组后者打包为字典。潜规则定义动态参数时*args、**kwargs#定义一个函数 def 函数名(): def test(): print(test) #调用函数 test() # py中参数没有修饰符。def 函数名(形参1形参2): def func_with_param(data): print(data) func_with_param(12) def func_with_params(p1,p2,p3): print(p1,p2,p3) func_with_params(p1 12,p3 13,p2 14) def func_with_params_default(p1,p2 23,p3 89): print(p1,p2,p3) func_with_params_default(12) print() #形参可变参数*。实参统一会被打包为元组 def func_with_params_tuple(*p): print(p) if len(p) 1: print(p[0]) if len(p) 2: print(p[0]) print(p[1]) #可以通过位置参数的形式传入n个参数 func_with_params_tuple(12) func_with_params_tuple(12,你好) #双星号自动打包为字典格式 def func_with_params_dict(**p): print(p.get(name)) print(p.get(age)) #实参必须用关键词的形式传参 func_with_params_dict(name 张三,age 12) #定义顺序单星号必须位于双星号之前。 #实参位置参数在前关键字传参在后。 def func_with_params_mix(*p1,**p2): print(p1[0]) print(p2.get(username)) func_with_params_mix(12,username 卢俊义)同一函数同时被调用多次每次调用都存在属于自己的调用栈彼此之间是独立的。2.函数的返回值#返回值可以是任意类型没有返回值默认返回None def func_with_return(): return 1212121 rtn func_with_return() print(rtn) def func_with_none(): print(none) #返回结果None print(func_with_none()) def func_with_r(): print( none ) return #返回结果None print(func_with_r()) def a() - 基本数据类型: #关键字 return 可以省略函数也可以显式缺失返回值此时返回默认值None return 基本数据类型3.可变 or 不可变类型def func(a1): #字符串是不可变类型重新分配内存 return a1.upper() v2 fjkwmqkjf print(func(v2)) #大写内容 print(v2) #原内容不变 def func2(a1): a1.append(100) l1 [1,2,434] func2(l1) print(l1) #[1, 2, 434, 100]注意入参是可变 or 不可变类型。4.作用域作用域一块内存区域。区域内的数据是可以共享的。py中执行函数就会为该函数创建一个作用域。全局作用域全部作用域共享。5.Global关键字global是用在函数中用于表示此变量不是新创建的数据而是全局变量中的那个数据地址指向形同。USER_TYPE blog def func3(): USER_TYPE edu print(USER_TYPE) print(USER_TYPE) #edu func3() #edu print(USER_TYPE) #edu print() def func4(): global USER_TYPE #生命该局部作用域内变量USER_TYPE使用全局变量 USER_TYPE edu print(USER_TYPE) print(USER_TYPE) #blog func4() #edu print(USER_TYPE) #edu6.函数名本质就是变量名def func(): print(123) print(func) # 函数名 function func at 0x104c29310 v1 func #变量v1指向函数名 v2 func() # v2变量是指函数的执行结果 data_list [func,func()] data_list[0] # 等价于v1 data_list[0]() # 运行函数func data_list[1] # 函数执行的返回结果备注函数名同样可以作为字典类型的value。7.lambda表达式【匿名函数】条件特定情况下使得代码更加简洁一行代码实现定义简单函数。f lambda : 12378788 print(f()) #12378788 f1 lambda a1,a2:a1 a2 print(f1(100,200)) #300 f2 lambda data_str : data_str.upper() print(f2(saska)) #返回大写 f3 lambda data_list:data_list[1] print(f3([2,4342])) # 输出列表下标为1的元素8.内置函数abs、pow【次方】、sum、divmod取余、all、any、ord、chr。v1,v2 divmod(92,10) print(v1,v2) data [1,3,-1] # 是否所有元素转换成布尔值均为true print(all(data)) # true 是否所有元素转换成布尔值均为true print(all([0,9])) # false # 存在元素为true则返回true print(any([1,-1,90])) # true print(any([0,,[],{}])) #false #unicode编解码~ 将文字和二进制坐上对应 print(ord(A)) # 返回字符对应的十进制数 print(chr(65)) #基于十进制数返回对应的字符int、str、bool、list、dict、set、tuple、float、bytes将目标value转化为对应类型的值。callable是否可执行。def func(): print(1234) date_list [12,34,func] for item in date_list: if callable(item): item()enumerate循环过程中自动提供自增的一列。goods [飞机,破鸡排,AK47] for idx,item in enumerate(goods,1): msg {} {}.format(idx,item) print(msg)排序data_l [23,45,12,4,1] #对原数组进行排序 data_l.sort() print(data_l) data_l1 [23,45,12,4,1] #排序后生成新列表原列表元素顺序不变区别于sort()函数 new_l sorted(data_l1) print(new_l,data_l1)9.推导式简便语法一行代码实现生成列表、字典等多个元素。9.1.列表推导式#生成1-100的列表 data_list [ i for i in range(100) ] #生成元素均为100的列表 data_list1 [ 100 for i in range(10) ] data_list2 [ 100 i for i in range(10) ] data_list3 [100 i for i in range(10) if 10 i 30] data_list4 [100,内控,3,哦好,(2,4),(4,6),[89,34,1,5,90]] print([item for item in data_list4 if type(item) int]) # [100,3] print([item for item in data_list4 if type(item) list]) # [[89,34,1,5,90]] print([item for item in data_list4 if type(item) tuple]) # [(2, 4), (4, 6)]9.2.字典推导式data { 键:值 for i in range(10)}print({i:123 for i in range(10)}) print({i:(i,i100) for i in range(10) if i 5})