一、函数的定义与调用:
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名():
(缩进)函数体–>要执行的内容
def smile():
print('哈哈','呵呵','嘻嘻')
print('哈哈','呵呵','嘻嘻')
print('哈哈','呵呵','嘻嘻')
print('hello world')
print('hello python')
注意:函数名要遵循标识符命名规则,并且遵循下划线命名法
调用函数: 函数名()
smile()
注意:函数只有在调用的时候才会执行。
先创建后调用
一般情况下,不要将调用函数放到函数体里面,否则将不会执行函数
函数可以调用多次:
创建一个函数体,可调用多次
完整结构:
def smile():
print('哈哈','呵呵','嘻嘻')
print('哈哈','呵呵','嘻嘻')
print('哈哈','呵呵','嘻嘻')
print('hello world')
print('hello python')
smile()
print('程序结束了')
smile()
smile()
执行过程:
运行结果:
哈哈 呵呵 嘻嘻
哈哈 呵呵 嘻嘻
哈哈 呵呵 嘻嘻
hello world
hello python
程序结束了
哈哈 呵呵 嘻嘻
哈哈 呵呵 嘻嘻
哈哈 呵呵 嘻嘻
hello world
hello python
哈哈 呵呵 嘻嘻
哈哈 呵呵 嘻嘻
哈哈 呵呵 嘻嘻
hello world
hello python
注意事项:
1、函数的名称要遵循标识符命名规范,使用下划线命名法
2、函数体是靠强制缩进来表示的
3 ?)都是英文
4、函数只有在调用的时候才会执行,只创建不调用是不会执行的
二、函数的注释:
def say_hello():
'''这是一个打招呼的函数'''
print('hello')
print('world')
say_hello()
1、在函数的第一行使用多行注释对函数的功能进行解释说明。
2、调用函数的时候,通过快捷键crtl+q可以查看函数的解释说明
而了解此函数的功能
三、定义带有参数的函数
函数的参数主要的作用是将函数外的数据带入到函数体执行逻辑判断。
1、定义参数的格式
def 函数名(参数1,参数2,参数3,…):
函数体
调用的时候,这个函数定义时有几个参数,就需要传递几个参数
默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参”
函数的参数
1、在小括号中写的是变量名,就是函数的参数,多个函数之间使用逗号隔开。
2、函数定义几个参数,调用参数的时候就必须传递对应的参数的个数(否则报错)
3、定义的参数叫做形参(形式参数,比如:aa、bb),调用函数的时候的参数叫做实参
(实际参数,比如1,2,)
def sum_num(aa,bb):
print(aa,'--->',bb)
num1=aa #num1=1
num2=bb #num2=2
num3=num1+num2 #num3=3
print(num3)
sum_num(1,2)
sum_num(32,13)
# sum_num() 报错因为没有传递参数
四、函数参数的类型
不可变类型参数:整数、字符串、元组。
可变数据类型:列表、字典
注意事项:
1、如果传递的是不可变数据类型,函数体中不能修改传递的值的大小
例如 b=200,表示重新开辟了新的内存空间,而不是修改a内存空间的值
2、如果传递的是可变数据类型,函数内部是可以修改的,内存空间地址不变
1、传递不可变数据类型:
a=10000
print('a变量的id是:',id(a))
def func(b):
print(b)
print('b变量的id是:',id(b)
func(a) #传递的是id地址
#a和b的地址相同,因此,值也是相同的
运行结果:
a变量的id是: 31248144
10000
b变量的id是: 31248144
a=10000
print('a变量的id是:',id(a))
def func(b):
b=200 #b重新开辟了新的内存空间,与a的地址将不再保持一致
print(b)
print('修改后b变量的id是:',id(b))
func(a)
print('a变量的id是:',id(a))
运行结果:
a变量的id是: 34900848
200
修改后b变量的id是: 503022832
a变量的id是: 34900848
2、传递可变数据类型:
outter_list=[1,2,3]
print('outter_list---->',outter_list,id(outter_list))
def func(inner_list):
print('inner_list---->',inner_list,id(inner_list))
inner_list.append(4)
# inner_list=[1,3,4,5] #此种方法是开辟新的空间
print(inner_list,id(inner_list))
func(outter_list)
print(outter_list) #[1,2,3,4] 内容被修改了,但内存地址保持一致
运行结果是:
outter_list----> [1, 2, 3] 35661704
inner_list----> [1, 2, 3] 35661704
[1, 2, 3, 4] 35661704
[1, 2, 3, 4]
五、函数的返回值
所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果。调用者根据需求利用返回值做不同的操作。
注意事项:
1、在函数体最后使用一个关键字return,要返回的值
2、如果有一个函数不写返回值,默写返回None
3、return有两个作用:
-可以返回值
-结束函数
4、return 关键字后面不允许在写代码。
def sum_num(aa,bb):
num3=aa+bb
print(id(num3))
return num3 #将num3返回给调用者
ret=sum_num(1,2) #定义一个变量ret来接收函数的返回值
print(ret,id(ret)) #内存地址保持一致
运行结果:
500788304
3 500788304
不写返回值:
def func():
print('func...')
ret=func()
print(ret)
运行结果:
None
return可以结束整个方法
def func(c):
print('func...')
a=10
b=c # 1
if b<a:
return #执行完直接退出函数体
print('zzz')
print('xxx')
func(11)
运行结果:
zzz
xxx
函数的嵌套:
函数里面套函数
def outter():
print('aaa')
def inner():
print('bbb')
inner() #调用内部函数
outter()
运行结果:
aaa
bbb
def func1():
print('func1...')
def func2():
func1()
print('func2...')
def func3():
func2()
print('func3...')
func3()
运行结果:
func1...
func2...
func3...