函数
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
- 函数的第一行语句可以选择性地使用文档字符串(用于存放函数说明)
- 函数内容以冒号起始,并且缩进
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None
定义函数
- 无返回值,默认返回 None ,
return None
- 函数如果没有函数体,可以用
pass
或者return
占位
def add(num1, num2):
"求两数相加值"
return num1 + num2
def reduce(num1, num2):
"求两数相减值"
return num1 - num2
def multiply(num1, num2):
"求两数相乘值"
return num1 * num2
def testFunc():
a = 100
b = 20
print("a+b = ", add(a, b))
print("a-b = ", reduce(a, b))
print("axb = ", multiply(a, b))
print("a/b = ", divide(a, b))
默认参数值的函数
- 第一个默认值可以省略形参名,其他位置不可以
# 补充默认值
def divide(num1 = 4, num2 = 2):
"求两数相除值"
return num1 / num2
def testFunc():
print("b 取默认值 = ", divide(num1=20))
print("a 取默认值 = ", divide(num2=100))
返回多个值的函数
- 注意一次接受多个返回值的数据类型就是元组
# 返回多个值
def getValues(num1, num2):
a = num1 % num2
b = (num1 - a) / num2
return b, a
def testFunc():
num1, num2 = getValues(10, 2)
tuple1 = getValues(10, 2)
print("求商与余数", num1, num2)
print("求商与余数的元组", tuple1)
不定长参数函数
- 通过跟参数加
*
添加不定长的参数 - 其实本质上加了
*
的参数就是元组
def printInfo(arg1, *vartuple):
print("输出: ", arg1)
for var in vartuple:
print("输出: ", var)
return None
def testFunc():
printInfo("我叫", "zhenzeqin", "age = 20", "height = 100kg")
只接受关键字参数
- 通过给函数加
*
形参,后面的参数则强制要使用参数名,否则报错# 打印用户信息 def print_user_info(name, *, age, height= 200): print('昵称:{}'.format(name), end=' ') print('年龄:{}'.format(age), end=' ') print('体重:{}'.format(height)) def testFunc(): # print_user_info("zhengzeqin", 20, 100) # 报错 参数是 * 号后的不能省略参数名 print_user_info("zhengzeqin", age= 20, height = 100)
匿名函数
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
基本语法: lambda [arg1 [,arg2,.....argn]]:expression
# lambda 匿名函数
def lambdaFunc():
sum = lambda num1, num2: num1 + num2;
print(sum(1, 2))
函数传值
- 不可变的对象:字符串,整形,浮点型,所以函数内部不会改变外传入的参数
- 可以变的对象: list , dict 等,与上相反
# 不可以变
def unchange(num):
num = num + 1
print("unchange 里 num 的值", num)
# 可以变
def change(list):
list.append(123)
print("change 里 list 的值", list)
def testFunc():
# 不可变
num11 = 100
unchange(num11)
print("unchange 外 num 的值", num11)
# 可以变
list11 = [1, 2, 3]
change(list11)
print("change 外 list 的值", list11)
推导式
# 推导式
def forFunc():
# 从1 到 10 所有偶数的平方
alist = []
for i in range(1, 11):
if i % 2 == 0:
alist.append( i*i )
print("从1 到 10 所有偶数的平方:", alist)
blist = [i*i for i in range(1, 11) if(i % 2) == 0]
print("blist 价于上面 alist:", blist)
# 数组 class_namse 转字典
class_names = ['PHP', 'Swift', 'Java', 'Python', 'Objective-C']
adict = {}
for i in class_names:
adict[i] = 0
print("生成字典:", adict)
bdict = {i: 0 for i in class_names}
print("bdict 等价于上面 adict:", bdict)
参考
Thanks
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues