一、函数定义
1、规则
a、函数代码块以def关键字开头,后接函数名和圆括号()
b、传入的参数和变量放在圆括号中,圆括号之间可以用来定义参数
c、函数的第一行语句可以选择性地使用注释(“”“”“”)用于函数说明,当调用函数时,可使用Ctrl+Q查看函数说明
d、函数体以冒号开始,并且注意缩进
e、使用return [表达式] 结束函数,选择性地返回一个值给调用方,如果不带表达式的return,则相当于返回 None
2、格式
def 函数名(参数列表):
函数体
二、函数调用
使用函数名(参数列表)方式调用函数
def print_welcome(name):
"""定义函数"""
print("Welcome", name)
return
def area(weight , height):
"""定义一个函数,计算长方形面积"""
return weight * height
# 函数调用
print_welcome('Kobe')
# 调用函数,使用变量接收函数返回值
areaN = area(2 , 3)
print("长方形的面积为:" , areaN)
Welcome Kobe
长方形的面积为: 6
三、参数传递
a、可更改(mutable)对象与不可更改(immutable)对象
python中,字符串(strings)、元组(tuples)和数字(numbers)是不可更改对象,而列表(list)、字典(dict)和集合(set)是可更改对象
-
不可变类型:变量赋值 a=1 后再赋值 a=2,实际是新生成一个 int 值对象2,再让 a 指向它,而 1 被丢弃,并不是改变a的值,而是新生成了一个a,变量的内存地址会发生变化;
-
可变类型:变量赋值 listA = [1,2,3,4]后再赋值listA[2] = 5,是将listA的第三个元素值更改,本身列表listA没有变动,只是其内部的部分元素被修改了,变量的内存地址不会发生变化;
a = 1
print("a = 1 的变量a的内存地址为:" , id(a))
a = 2
print("a = 2 的变量a的内存地址为:" , id(a))
listA = [1 , 2 , 3 , 4 , 5]
print("listA修改前:" , listA)
print("listA列表修改前的内存地址为:" , id(listA))
listA[4] = 6
print("listA修改后:" , listA)
print("listA列表修改后的内存地址为:" , id(listA))
a = 1 的变量a的内存地址为: 140711762161920
a = 2 的变量a的内存地址为: 140711762161952
listA修改前: [1, 2, 3, 4, 5]
listA列表修改前的内存地址为: 2600661373512
listA修改后: [1, 2, 3, 4, 6]
listA列表修改后的内存地址为: 2600661373512
python 函数的参数传递:
-
不可变类型:类似 c++ 的值传递,如整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身,在 fun(a)函数内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身;
-
可变类型:类似 c++ 的引用传递,如列表、字典。如fun(listA),则是将listA真正的传过去,修改listA后fun外部的listA也会受影响;
# python 传不可变对象实例
def ChangeInt(a):
print("参数传递的a的值是:" , a , "a的内存地址为:" , id(a))
a = 1
print("重新赋值后的a的值是:" , a , "a的内存地址为:" , id(a))
return
b = 2
ChangeInt(b) # 调用函数时将b的值传给a,此时a等于2,再执行赋值操作a = 1时,新生成一个对象a,两个a的内存地址不一样
print("b的值是:" , b)
参数传递的a的值是: 2 a的内存地址为: 140711762161952
重新赋值后的a的值是: 1 a的内存地址为: 140711762161920
b的值是: 2
# 传可变对象实例,列表mylist在函数changeme里发生了变化,mylist指向同一个内存地址,因此外面的listA也同步发生改变
def changeme( mylist ):
"""修改传入的列表"""
mylist.append([1,2,3,4])
print ("函数内取值: ", mylist)
return
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)
函数内取值: [10, 20, 30, [1, 2, 3, 4]]
函数外取值: [10, 20, 30, [1, 2, 3, 4]]
四、函数参数
参考文档:https://www.liaoxuefeng.com/wiki/897692888725344/8976935682014