# 函数
# 可读性强 复用性强
# def 函数名():
# 函数体
#return 返回值
# 所有的函数 只定义不调用就一定不执行
#先定义后调用
#函数名() #不接收返回值
#返回值 = 函数名() #接收返回值
#返回值
# 没有返回值 :默认返回None
# 不写return:函数内的代码执行完毕自动结束
# 只写return:结束一个函数
# return None
# 返回一个值 :结束了函数且返回一个值,可以是任意的值
# 返回多个值 : 多个值之间用逗号隔开,接收的时候可以用一个变量接收(元组),也可以用等量的多个变量接收
# def f(a):
# return ‘栗子‘
#
# ret = f(‘苹果‘)
# print(f(‘苹果‘))
#参数
#形参 定义函数的时候
# 位置参数 :必须传
# *args :动态参数 可以接收任意多个按位置传入的参数
# 默认参数 : 可以不传 —— 陷阱
# **kwargs : 动态参数 可以接受任意多个按关键字传入的参数
#实参 调用函数的时候
# 按照位置传参数
# 按照关键字传参数
# 可以混用 位置参数必须在关键字传参之前
# 不能对一个参数重复赋值
# def 娃哈哈(*args):
# print(args)
#
# # 娃哈哈(1,2,3,4)
# l = [1,2,3,4]
# 娃哈哈(*l)
默认参数的陷阱
def qqxing(l = []): l.append(1) print(l) qqxing() #[1] qqxing([]) #[1] qqxing() #[1,1] qqxing() #[1, 1, 1] # 如果默认参数的值是一个可变数据类型, # 那么每一次调用函数的时候, # 如果不传值就公用这个数据类型的资源 def qqxing(l = {}): # l.append(1) l[‘k‘] = ‘v‘ print(l) qqxing() #{‘k‘: ‘v‘} qqxing() #{‘k‘: ‘v‘} qqxing() #{‘k‘: ‘v‘} def qqxing(k,l = {}): # l.append(1) l[k] = ‘v‘ print(l) qqxing(1) #{1: ‘v‘} qqxing(2) #{1: ‘v‘, 2: ‘v‘} qqxing(3) #{1: ‘v‘, 2: ‘v‘, 3: ‘v‘} def qqxing(k, l = {}): # l.append(1) l[k] = ‘v‘ print(l) qqxing(1) #{1: ‘v‘} qqxing(2, l={}) #{2: ‘v‘} qqxing(3) #{1: ‘v‘, 3: ‘v‘}
原文:https://www.cnblogs.com/LXL616/p/10659010.html