Python学习之函数初识
一、函数初识
一、定义和使用
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数式编程最重要的是增强代码的重用性和可读性,避免重复代码
def 函数名(参数): ... 函数体 ... 返回值
函数的定义主要有如下要点:
定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。 def 是固定的,不能变,他就是定义函数的关键字。 空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。 函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能 括号:是必须加的,先别问为啥要有括号,总之加上括号就对了! 注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。 调用:就是 函数名() 要记得加上括号。
二、函数的调用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#函数定义 def mylen(): """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) #函数调用 mylen()
三、函数的返回值
不写return的情况下,会默认返回一个None
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
return None:和上面情况一样,我们一般不这么写。
返回一个值
刚刚我们已经写过一个返回一个值的情况,只需在return后面写上要返回的内容即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
返回多个值
可以返回任意多个、任意数据类型的值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
返回的多个值会被组织成元组被返回,也可以用多个值来接收
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
四、函数的参数
我们告诉mylen函数要计算的字符串是谁,这个过程就叫做 传递参数,简称传参,我们调用函数时传递的这个“hello world”和定义函数时的s1就是参数。
实参与形参
参数还有分别:
我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。
定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。
传递多个参数
参数可以传递多个,多个参数之间用逗号分割。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
位置参数
站在实参角度
1.按照位置传值------必须一一对应
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2.按照关键字传值
PS : 三元运算
z = x if x > y else y (适用于if,else 语句)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
3.位置、关键字形式混着用-----有顺序,位置参数在前,关键字参数在后
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
站在形参角度
位置参数必须传值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
默认参数
1.正常使用
使用方法
为什么要有默认参数:将变化比较小的值设置成默认参数
2.默认参数的定义
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
参数陷阱:默认参数是一个可变数据类型
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
动态参数
一、*args 动态参数,不定长参数
args元组,他包含了你所有的位置参数.
def func(*args): print(args,type(args)) func(1,2,'alex',3,4,5,6,8,4,7,2) #(1, 2, 'alex', 3, 4, 5, 6, 8, 4, 7, 2) <class 'tuple'>
def func(a,b,c,*args,): print(a) print(b) print(c) print(args,type(args)) func(1,2,'alex',3,4,) #1 2 alex (3, 4) <class 'tuple'>
def func(a,b,c,*args,sex = '男'): print(a) print(b) print(c) print(sex) print(args,type(args)) func(1,2,'alex','wusir','ritian ',sex='女') # 1 2 alex 女 ('wusir', 'ritian ') <class 'tuple'>
**kwargs 他包含了关键动态参数
kwargs输出的是字典格式
def func(**kwargs): print(kwargs) func(a = 1,b = 4,c = 3,d = 2) #{'a': 1, 'b': 4, 'c': 3, 'd': 2}
形参顺序
位置参数,*args,默认参数,**kwargs
def func(a,b,c,*args,sex = '男',**kwargs): print(a) print(b) print(c) print(sex) print(args,type(args)) print(kwargs) func(1,2,'alex','wusir','ritian ',sex = '女',name = 'taibai',age = 21)
万能参数
def func2(*args,**kwargs): #万能参数 print(args) print(kwargs) func2(1,2,3,5,name='alex',age=56) #(1, 2, 3, 5) {'name': 'alex', 'age': 56}
*魔法运算: 打散
def func2(*args,**kwargs): print(args) #(1,2,3) l1 = [1,2,3,] l2 = [1,2,3,2,3,100,2] func2(*l2,*l1) #(1, 2, 3, 2, 3, 100, 2, 1, 2, 3)
def func3(*args,**kwargs): print(args) print(kwargs) dic = {'name':'alex','age':12} dic2 = {'name':'jin','age':22} func3(**{'name1':'alex','age1':12},**{'name2':'jin','age2':22},name3 = 'wusir') #() {'name1': 'alex', 'age1': 12, 'name2': 'jin', 'age2': 22, 'name3': 'wusir'}