函数
1. 什么函数
可以实现一些特定功能的方法
优点:
- 简化代码结构,增加代码的复用度
- 提高代码可读性,方便维护
2. 函数定义
def 函数名():
函数体
函数名: 遵循标示符命名规则
注意:
函数调用,先定义,后调用
同一个模块里, 函数可以重名,但是会被覆盖
函数区分大小写
def speaker(): print("你们是最棒的~")
3. 函数定义方式
普通定义方式:
def speak(): print("普通方式")
带有参数函数
def add(x,y): # x,y 形参 print(x+y) add(100,200) # x,y 实参
带默认值参数
错误形式: def add(x=10,y): # 形参中,不全都带默认值情况下, 默认值参数要靠后 print(x,y) 更正后: def add(x,y=10): print(x+y)
总结:
1. 如果定义函数有形参, 但是没有默认值, 那么调用时候,必须传递实参,且实参个数必须与形参相等 2. 函数定义的时候,如果形参有默认值,那么传递的实参,会将默认值覆盖,不传递,也无所谓 3. 函数形参不全有默认值,那么在定义过程中,默认值参数靠后
关键字参数
定义: 可以使用关键字,来改变形参和实参默认顺序
注意: 要么都给,要么都不给
def keyArgs(x,y): print("x的值{},y的值{}".format(x,y)) keyArgs(10,x = 20) TypeError: keyArgs() got multiple values for argument 'x'
注意:
如果有形参并且没有默认值,实参中如果第一个给了关键字,其他都需要给
def keyArgs(x,y): print("x的值{},y的值{}".format(x,y)) keyArgs(x=10,20) 正确形式: keyArgs(x=10,y=20)
实参赋值时候,如果顺序不固定,形参名 = 实参
def keyArgs(x,y): print("x的值{},y的值{}".format(x,y)) keyArgs(y=10,x=20)
如果形参都有默认值, 第一个设置形参名=实参,其他不需要给
def keyArgs(x=10,y=20,z=30): print("x的值{},y的值{},z的值{}".format(x,y,z)) keyArgs(y=90)
4. 函数返回值
关键字: return
def demo(): return "py" print("hello ai")
没有返回值时候: None
返回多个值
def value(): return [1,2,3,4,5,6,7,8,9,10] v = value() print(v)
5. 函数练习
模拟实现pop功能
def pop(l): new_list = l[:-1] return new_list l = [1,2,3,4,5] l = pop(l) print(l)
模拟实现popitem()函数功能,并返回被删除键值对
import random def pop_item(dict): keys = dict.keys() klist = list(keys) # 随机选择key一个效果 key = random.choice(klist) # 获取key 和 value key,value = key,dict[key] del dict[key] return key,value d = {"头条":"抖音","阿里巴巴":"闲鱼","腾讯":"微信"} key,value = pop_item(d) print(key,value)
定义一个函数,实现字典健值交换
第一种写法: transDict = {"a":1,"b":2,"c":3} transDict_new = {} for key , value in transDict.items(): transDict_new[value] = key print(transDict_new) 第二种写法: transDict_new = dict([val,key] for key,val in transDict.items()) print(transDict_new) # 第三种写法 transDict_new = dict(zip(transDict.values(),transDict.keys())) # print(transDict_new) # zip()函数 可以将两个序列中的值一一对应输出,需要强转,如果两个序列不一样长那么多余的值无法对应,不会输出 value = (1,2,3,4,5,6,7) value1 = (7,6,5,4,3,2,1) new = dict(zip(value1,value)) print(new) # 输出结果为 {7: 1, 6: 2, 5: 3, 4: 4, 3: 5, 2: 6, 1: 7}