函数的定义
Python 使用关键字 def 定义函数, 格式与 C 语言类似, 但是没有返回类型, 参数也不需要设置类型
- def add(a, b):
- """这是函数的文档字符串"""
- return a + b
- def append(data):
- data.append(a) #如果 data 为可变对象时候, 例如 ListDict, 则会改变实参的值
函数调用 会为函数局部变量生成一个新的符号表确切的说, 所有函数中的变量赋值都是将值存储在局部符号表变量引用首先在局部符号表中查找, 然后是包含函数的局部符号表, 然后是全局符号表, 最后是内置名字表因此, 全局变量不能在函数中直接赋值(除非用 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 wouldnt", action, end= )
- print("if you put", voltage, "volts through it.")
- print("-- Lovely plumage, the", type)
- print("-- Its", state, "!")
- # 以下调用均是错误的
- parrot() # 必须参数没有
- parrot(voltage=5.0, dead) # 关键字参数必须在位置参数之后
- parrot(110, voltage=220) # ** 任何参数都不可以多次赋值 **
- parrot(actor=John Cleese) # 不存在该参数名
来源: http://www.bubuko.com/infodetail-2498385.html