函数的定义
Python 使用关键字def定义函数,格式与C语言类似,但是没有返回类型,参数也不需要设置类型。
def add(a, b):
"""这是函数的文档字符串"""
return a + b
def append(data):
data.append(a) #如果data为可变对象时候,例如List、Dict,则会改变实参的值
函数调用 会为函数局部变量生成一个新的符号表。确切的说,所有函数中的变量赋值都是将值存储在局部符号表。变量引用首先在局部符号表中查找,然后是包含函数的局部符号表,然后是全局符号表,最后是内置名字表。因此,全局变量不能在函数中直接赋值(除非用 global 语句命名),尽管他们可以被引用。
Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值‘来传递对象。
参数
默认参数: 为参数设定默认值,调用函数时,如果没有值即使用默认值。
def login(username,password = "123"):
"""登录函数"""
pass
login("admin")
login("admin","password")
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
# 输出结果
[1]
[1, 2]
[1, 2, 3]
>>> def f(x = []):
... x.append(1)
... print(id(x))
...
>>> f()
140693834878408
>>> f()
140693834878408
>>> f()
140693834878408
>>>
关键字参数调用:即指定形式key = value来调用函数,关键字参数应该在位置参数后面。
def parrot(voltage, state=‘a stiff‘, action=‘voom‘, type=‘Norwegian Blue‘):
print("-- This parrot wouldn‘t", action, end=‘ ‘)
print("if you put", voltage, "volts through it.")
print("-- Lovely plumage, the", type)
print("-- It‘s", state, "!")
# 以下调用均是错误的
parrot() # 必须参数没有
parrot(voltage=5.0, ‘dead‘) # 关键字参数必须在位置参数之后
parrot(110, voltage=220) # **任何参数都不可以多次赋值**
parrot(actor=‘John Cleese‘) # 不存在该参数名