目录
一.函数的定义和调用:
1.函数的格式:
def 函数名称()
...函数体...
注意:
函数的名称是要遵循标识符命名规则,使用下划线命名法。
函数体是靠强制缩进来表示的。
:()都是用英文来表示的。
函数只有在调用时才会执行,只创建不调用是不会执行的。
2.调用函数的格式:
函数名()
注意:
必须先创建函数,后调用函数。
一般情况下调用函数不能和函数体放在一起。
函数可以调用多次。
def say_hello():
print('hello')
say_hello()
say_hello()
say_hello()
输出结果:hello
hello
hello
3.函数的注释:
在函数体的一行适应多行注释对函数的功能进行解释说明
调用函数的时候,通过快捷键ctrl+Q,可以查看函数的功能。
注释用三引号括起来:
4. 带参数的函数:
-在小括号中写的变量名就是函数的参数,多个参数之间使用逗号","隔开。
-函数定义几个参数,调用函数是就必须传递对应个数的参数。
-定义函数的参数叫做形参--->形式参数
-调用函数时候的参数叫做实参-----> 实际参数
二.函数参数的类型:
可变数据类型: list,dic
不可变数据类型: int,str,float
1.传递不可变数据类型不会影响参数本身
a =100
print('a的id是:',id(a)) # 查看
def func(b):
print(b)
print('b的id是:',id(b))
func(a)
输出结果:a的id是: 493516912
100
b的id是: 493516912
由此可以看是传递不可变数据类型,函数本身是不会改变的。
2.传递可变参数类型:(会影响参数本身)
输出结果:
如果修改参数:形参被修改,实参也会跟着改。
输出结果:
三.函数的返回值及返回多个值:
1.返回值: return是谁调用的就把返回值给谁
格式: 函数名(参数1,参数2,...):
...函数体...
return 值
1. 在函数体的最后使用关键字return 要返回的值
2. 如果一个函数不写返回值,默认返回None
3.return有两个作用:
-可以返回值
-可以结束这个函数,一般return 后面不会再写其他代码了。
1.返回值
def sum_num(aa,bb):
num3 = aa+bb
return num3 # 返回num3
ret = sum_num(1,2) # 定义一个变量ret来接受函数返回的值,拿到返回值后可以做后续的逻辑操作。
print(ret)
输出结果:3
2.返回None
def sum_num(aa,bb):
num3 = aa+bb
return # 没有写返回值
ret = sum_num(1,2)
print(ret)
输出结果:None
3.return两个作用
def func(c):
print('func...')
a = 10
b = c
if b < a: # 在函数体内进行条件判断
return
print('哈哈哈')
print('呵呵呵')
func(1)
输出结果:func...
--------------------------------------------------------------------
def func(c):
print('func...')
a = 10
b = c
if b < a: # 在函数体内进行条件判断
return
print('哈哈哈')
print('呵呵呵')
func(11)
输出结果:func
哈哈哈
呵呵呵
2.返回多个值:
语法:
def 函数名():
...函数体...
Return 值1,值2,...
返回多值其实就是返回一个tuple,在语法上返回一个tuple可以省略括号数
def func():
a = 10
b = 20
return a,b
ret = func()
print(ret)
输出结果:(10,20)
四.位置参数和关键字参数:
1.位置参数:
实参和形参一一对应,按照对应位置传递参数,叫位置参数。
def sum_num(num1,num2):
sum = num1+num2
print(sum)
sum_num(12,13) # 12传递给num1, 13传递给num2,一一对应
输出结果:25
2.关键字参数:
按关键字传递参数,位置变化不会影响且关键字必须是在形参中声名过才能使用。
输出结果: 25’
注意:如果位置参数和关键字参数混用,必须位置参数在前,关键字参数在后。
def sum_num(num1,num2):
sum = num1+num2
print(sum)
sum_num(12,num2=13) # 12 是按照位置参数传递给num1, num2=13按照关键字参数传递。
输出结果:25
五.默认参数和可变参数:
1.默认参数:
在定义函数的形参的时候,可以给形参赋一个初始值(默认值),这种参数就叫做默认参数,当调用函数的时候,
如果不给默认参数赋值,函数就会使用使用默认值,如果给默认参数赋值,函数就会使用重新赋的值。
注意:默认参数一定要写在形参后面。
def user_info(name,age,gender='男'):
print('姓名:{},年龄:{},性别:{}'.format(name,age,gender))
user_info('张三',20) # 使用默认值 注意一一对应
user_info('王五',30,'女') # 使用赋的值 注意一一对应
输出结果:姓名:zs,年龄:20,性别:男
姓名:ww,年龄:30,性别:女
2.可变参数:
如果函数中的参数过多,我们定义起来非常的麻烦,调用起来也非常的麻烦,因此python给我们提供了可变参数类型。能处理比当初声明时更多的参数,会将传入的参数变成元组(*args)或者字典(**kwargs)
元组参数: *args
通过给形参前面添加*使参数变成一个元组,所有传递的参数变成元组的元素
注意: args参数名称可以任意命名,但是一般我们叫他 args。
f func(*args):
print(args)
print(args[0],args[1]) # 获取元组内前两个元素。
func(1,2,3,4) # 可以传递多个实参
输出结果:(1,2,3,4)
1,2
* 具有打散功能:
tup = (1,2,3,4)
print(*tup)
lst = ['a','b','c','d']
print(*lst)
s = 'hello'
print(*s)
输出结果:1 2 3 4
a b c d
h e l l o
字典参数 **kwargs:
通过给形参前面添加**使参数变成一个字典,所有传递的参数变成字典的键值对,这里传参要求键等于值的形式。
**kwargs结果类型是字典,传递值是以key=value方式传入
def func(**kwargs):
print(kwargs)
func(name = 'zs',age = 20, gender ='男' ) #{'name': 'zs', 'age': 20, 'gender': '男'}
输出结果:{'name': 'zs', 'age': 20, 'gender': '男'}
打散字典:
def func(name,age):
print(name,age)
dic={'name':'zs','age':20}
func(**dic)
输出结果:zs 20
注意:**kwargs必须放在*args后面,否则会报错。
六.参数顺序和函数嵌套:
1.参数顺序:
创建函数声名参数时的顺序:
位置参数,*args,默认参数,**kwargs
输出结果:
2.函数嵌套:
def outter():
print('aaa')
def inner():
print('bbb')
inner()
outter()
输出结果:aaa
bbb