python成长之路六-函数的初识
定义函数
我们现学已知的python函数有<内置函数>
而我们现在要学的是<自定义函数>
1,def 定义一个函数
def name(): # 后接函数名 冒号 pass
2,调用函数
def name(): print("代码...") name() # 函数名加括号 ###一定要加括号,不加括号调用的是函数名的内存地址
3,return 返回值
1,不写return的情况下,会默认返回一个None
def name(): print("代码...") # 打印 print(name()) 运行结果: # 打印调用函数 代码... None
2,函数后面只写return,一样返回None,return下面的代码不执行
def ret_demo(): print(111) return # 遇到return 结束整个函数 print(222) ret_demo() 运行结果: 111
3,return 后接一个值 (返回值的数据类型参数原本的数据类型)
def demo(): a = 1 b = 2 c = a + b return c print(demo()) 运行结果: 3
4,return 后接多个值,可以是任意数据类型(返回的多个值会被组织成元组被返回,也可以用多个值来接收)
def my_len(): a = "jadshhsah" content = 0 for i in a: content+=1 return content ,"哈哈哈",123 print(my_len()) 运行结果: (9, '哈哈哈', 123) def ret_demo2(): return 1,["a","b"],3,4 a,b,c,d = ret_demo2() # 多个值接收 print(a,b,c,d) 运行结果: 1 ['a', 'b'] 3 4
4,函数传参
传参分为形参和实参
def mymax(x,y): # x,y为形参 if x > y: # 比较大小,输出比较大的 return x else: return y print(mymax(110, 119)) # 110,119为两个实参
1,位置参数
形参实参位置要一一对应,就如上面的x,y和110,119
2,关键字参数
可以不用对应
def mymax(x,y): print(x,y) max = x if x > y else y return max ma = mymax(y = 20, x = 10) print(ma)
3,混合参数
位置参数一定要在关键字参数前面
def mymax(x,y): print(x,y) max = x if x > y else y return max ma = mymax(10, y = 20) print(ma)
4,默认参数
将不常变化的值设置成默认值,
传参时,不输入则显示默认,输入则替换默认值
def stu_info(name,sex = "male"): '''打印学生信息,由于班里大多都是男生 所以设置参数"sex"默认值为”male“''' print(name,sex) stu_info("alex") stu_info("xiaomei","female")
默认参数之面试坑:
如果默认参数是个可变的数据类型
def defult_param(a,l = []): l.append(a) print(l) defult_param("alex") defult_param("egon") 运行结果: ['alex'] ['alex', 'egon']
5,动态参数
动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,**kwargs接收,args是元祖形式,
接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。
def trans_para(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) trans_para("jinxin",12,[1,2,3,4],[3,4,],(1,4,7),{"a":"123","c":456},country="china")
* 的魔性用法
在函数的定义时,在 *位置参数,**位置参数聚合。
在函数的调用(执行)时,在 *位置参数,**位置参数打散
# l1 = [1,2,3] # l2 = [111,22,33,'alex'] # def func1(*args): # print(args) # return args[0] + args[1] # print(func1(l1,l2)) # def func1(*args,**kwargs): # # print(args) # print(kwargs) # func1(*l1,*l2) # func1(*(1,2,3),*('alex','sb')) # func1(*'alex',*'sb') # func1(1,2,3,'alex','sb') # # func1(**{'name':'alex'},**{'age':1000}) # func1(name='alex',age=1000})
5,三元运算
常用于简单的if 语句判断
max = x if x > y else y
li = [1,2,3,5,4,6,7,8] l1 = [i for i in li if i >5] # 找出大于5的数 运行结果: [6, 7, 8] def max_num(a,b): """ 输入两个数比大小""" max = a if a > b else b return max print(max(4,8))