函数
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
- 函数的第一行语句可以选择性地使用文档字符串(用于存放函数说明)
- 函数内容以冒号起始,并且缩进
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None
定义函数
- 无返回值,默认返回 None ,
return None - 函数如果没有函数体,可以用
pass或者return占位 ```python 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))
<a name="wmli6"></a>### 默认参数值的函数- 第一个默认值可以省略形参名,其他位置不可以```python# 补充默认值def divide(num1 = 4, num2 = 2):"求两数相除值"return num1 / num2def testFunc():print("b 取默认值 = ", divide(num1=20))print("a 取默认值 = ", divide(num2=100))
返回多个值的函数
- 注意一次接受多个返回值的数据类型就是元组
```python
返回多个值
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)
<a name="gssPA"></a>### 不定长参数函数- 通过跟参数加 `*` 添加不定长的参数- 其实本质上加了 `*` 的参数就是元组```pythondef printInfo(arg1, *vartuple):print("输出: ", arg1)for var in vartuple:print("输出: ", var)return Nonedef testFunc():printInfo("我叫", "zhenzeqin", "age = 20", "height = 100kg")
只接受关键字参数
- 通过给函数加
*形参,后面的参数则强制要使用参数名,否则报错 ```python打印用户信息
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)
<a name="sWd0i"></a>### 匿名函数- lambda 只是一个表达式,函数体比 def 简单很多。- lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。- lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。基本语法: `lambda [arg1 [,arg2,.....argn]]:expression````python# lambda 匿名函数def lambdaFunc():sum = lambda num1, num2: num1 + num2;print(sum(1, 2))
函数传值
- 不可变的对象:字符串,整形,浮点型,所以函数内部不会改变外传入的参数
- 可以变的对象: list , dict 等,与上相反
```python
不可以变
def unchange(num): num = num + 1 print(“unchange 里 num 的值”, num)
可以变
def change(list): list.append(123) print(“change 里 list 的值”, list)
def testFunc():
# 不可变num11 = 100unchange(num11)print("unchange 外 num 的值", num11)# 可以变list11 = [1, 2, 3]change(list11)print("change 外 list 的值", list11)
<a name="KF9HB"></a>## 推导式> 补充 for 的推导式```shell# 推导式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] = 0print("生成字典:", adict)bdict = {i: 0 for i in class_names}print("bdict 等价于上面 adict:", bdict)
