一、函数的定义
def 函数名(形参):
函数体
return 返回值
注:形参和返回值不为一个,可以有多个形参和返回值。
二、函数的调用
函数名(实参)
实现打印返回值:print 函数名()
总结:
定义函数时,函数不执行;
调用函数时,函数才执行。
例1
# 定义函数
# 如果不主动调用函数,函数是不会执行的
def say_hello():
print 'hello python'
# 函数调用
say_hello()
"""结果如下"""
# hello python
例2
# 定义函数时的变量,叫形参
def sum_2_sum(num1, num2):
result = num1 + num2
print '%d + %d = %d' % (num1, num2, result)
# 在调用函数的时候传递的参数称为实参
sum_2_sum(5, 20)
"""结果如下"""
# 25
总结:函数参数的使用,在函数名后面的小括号内填写参数,多个参数之间使用”,”分隔;形参和实参的个数必须一致。
三、函数变量的作用域
局部变量:在函数内部定义的普通变量,只在函数内部作用,函数执行结束后变量会自动删除
全局变量:所有代码执行完后才会释放
例1
a = 1
print 'outside:', id(a)
def fun():
# global a # 声明a为全局变量
a = 5
print 'inside:', id(a)
fun()
print a
print id(a)
"""结果如下"""
# outside: 24988776
# inside: 24988680
# 1
# 24988776
可以看到在函数执行之前打印的a的内存地址和在函数执行之后,再次打印的a的内存地址是一样的,因为a为全局变量。而在fun()函数内部定义的a的内存地址和外部是不一样的,函数内定义的a为局部变量,在函数执行结束后自动删除。若要使得在函数内部定义的变量可以使用global关键字,< global 变量名 > 即可声明一个变量为全局变量。
四、函数形参的四大参数
形参包含位置参数,默认参数,可变参数,关键字参数四种类型,接下来一一进举例和说明。
1.位置参数:形参和实参个数必须保持一致
def getInfo(name, age):
print name, age
getInfo(age=12, name='tom')
"""结果如下"""
# tom 12
2.默认参数:形参和实参的个数可以不一致
def mypow(x, y=2):
"""
求x的y次方,y的默认值为2,即若没有传递y的值,则认为y的值为2;若传递了y的值,即y的值为所传递值。
"""
print x ** y
mypow(4)
# 默认参数可以改变
mypow(4, 3)
"""结果如下"""
# 16
# 64
3.可变参数:参数的个数任意,类型也任意
def mysum(*args):
"""
*:args:是可变参数
args:是元组数据类型
args:名字可变(因为是形参)
:param args:
:return:
"""
print args
sum = 0
for item in args:
sum += item
print sum
mysum(1, 2, 3, 4)
# 对list tuple set 解包时,只需要在变量前加*
num = [1, 2, 3, 44, 89]
num1 = (1, 2, 3, 4, 5)
num2 = {1, 2, 3}
# *num : 解包
mysum(*num1)
mysum(*num2)
"""结果如下"""
# (1, 2, 3, 4)
# 10
# (1, 2, 3, 4, 5)
# 15
# (1, 2, 3)
# 6
4.关键字参数:在原有参数基础上,可以接受任意多个参数
def getStuInfo(name, age, **kwargs):
"""
**kwargs:是一个字典,可以传递任意多的key-value对
:param name:
:param age:
:param kwargs:
:return:
"""
print name, age
print kwargs getStuInfo('lily', 18, hobbies=['code', 'running'], gender='female')
getStuInfo('tom', 18)
"""结果如下"""
# lily 18
# {'gender': 'female', 'hobbies': ['code', 'running']}
# tom 18
# {}
总结:在后面的开发中一般函数定义使用*args和**kwargs作为形参来接受传递的参数。