1. 函数定义
Python 函数定义格式为:
def 函数名(参数列表) :
函数体
2. 参数传递
之前在学习 C 或 Java 时,一个绕来绕去的知识点就是关于函数入参,传递的究竟是数值,还是对象引用。在 Python 中,其实也有这个概念,只不过可以换一种表达方式:
可更改对象 (mutable) && 不可更改对象 (immutable)
数值类型(number)、字符串类型(string)和元组类型(tuple)都是不可更改的对象;列表类型(list)和字典类型(dictionary)则是可更改的对象。
- 比如对于数值类型的变量
a = 1
a = 2
这个过程本质上是先生成一个数值对象1,将 a 指向该对象,然后再生成一个数值对象2,让 a 重新指向该对象,原来那个数值对象1也不再使用了,因此这个过程并不是改变了 a。
- 比如对于列表类型的变量
list = [1,2,3,4,5]
list[2] = 10
这个过程本质上是改变了 list 所代表的列表对象内部的值
写一个简单的例子:
# 这个函数的入参是不可变对象--数值
def change_number(x) :
x = 100
# 这个函数的入参是可变对象--列表
def change_list(list) :
list.append(12345)
# 主程序
x = 1
print('Before invoke change_number x =', x)
change_number(x)
print('After invoke change_number x =', x)
list = [1,2,3]
print('Before invoke change_list list =', list)
change_list(list)
print('After invoke change_list list =', list)
执行结果为:
Before invoke change_number x = 1
After invoke change_number x = 1
Before invoke change_list list = [1, 2, 3]
After invoke change_list list = [1, 2, 3, 12345]
3. 传递参数的表达方法
有四种传递参数的表达方法:
- 必需参数
- 关键字参数
- 默认参数
- 不定长参数
1) 必须参数
必需参数指的是必须以正确的顺序传入函数,参数个数必须和声明时的一样,否则会出现运行错误。这是最常见的方式,不再赘述。
2) 关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
def user(name, age) :
print('name :', name)
print('age : ', age)
print('入参顺序和函数声明一致')
user(name = 'andy', age = 35)
print('入参顺序和函数声明不一致')
user(age = 35, name = 'andy')
执行结果为
入参顺序和函数声明一致
name : andy
age : 35
入参顺序和函数声明不一致
name : andy
age : 35
3) 默认参数
调用函数时,如果没有传递参数,则会使用默认参数
def user(name = '无名氏', age = 100) :
print('name :', name)
print('age : ', age)
print('两个参数都显示设定')
user(name = 'andy', age = 35)
print('只显示设定名字')
user(name = 'andy')
print('只显示设定年龄')
user(age = 35)
执行结果为:
两个参数都显示设定
name : andy
age : 35
只显示设定名字
name : andy
age : 100
只显示设定年龄
name : 无名氏
age : 35
4) 不定长参数
我还没写完呐……