1、函数
# 定义函数
# 如果不主动调用函数,函数是不会执行的
def say_hello():
print 'hello1'
print 'hello2'
print 'hello3'
# 函数的调用
say_hello()
def sum_2_sum():
"""对两个数字的求和"""
num1 = 20
num2 = 20
result = num1 + num2
print '%d + %d = %d' %(num1,num2,result)
sum_2_sum()
"""
函数参数的使用
在函数名后面的小括号内填写 参数
多个参数之间使用 , 分隔
"""
# 定义函数时的变量,叫形参 形参可以任意起名字
def sum_2_sum(num1,num2):
"""
:param num1:
:param num2:
:return:
"""
result = num1 + num2
print '%d + %d = %d' %(num1,num2,result)
# 在调用函数的时候
# 在调用函数时传递得参数称为实参(真实的数据信息)
sum_2_sum(5,20)
2、函数变量的作用域
局部变量:在函数内部定义的普通变量,只在函数内部作用,函数执行结束
变量会自动删除
全局变量
#通过变量id来判断哪个是局部变量,哪个是全局变量
例1:
a = 1
print 'outside:',id(a)
def fun():
global a # 声明a为全局变量
a = 5
print 'inside:',id(a)
fun()
print a
print id(a)
例2:
def test(num):
print '在函数内部%d对应的内存地址是%d' %(num,id(num))
result = 'hello'
print '函数要返回的数据的内存地址是 %d' %id(result)
return result
a = 10
print 'a变量保存数据的内存地址是%d' %id(a)
r = test(a)
print '%s 的内存地址是 %d' %(r,id(r))
3、函数形参之四大参数:
参数:形参 实参
形参:位置参数 默认参数 可变参数 关键字参数
1.位置参数:形参和实参个数必须保持一致
def getInfo(name,age):
print name,age
getInfo(age=12,name='westos')
2.默认参数:形参和实参的个数可以不一致
def mypow(x,y=2):
求x的y次方,y的值默认为2
:param x:
:param y:
:return:
"""
print x**y
mypow(4)
# 默认形参可以改变
mypow(4,3)
3.可变参数
def mysum(*agrs):
"""
*args:是可变参数
args:是元组类型数据
args:名字可变(因为是形参 名字可变)
:param agrs:
:return:
"""
print agrs
sum = 0
for item in agrs:
sum += item
print sum
#对list tuple set 解包时,只需要在变量前加 *
nums = [1,2,3,4,66,78]
nums1 =(1,2,3,4,5)
nums2 = {1,2,3}
# *nums:解包
mysum(*nums2)
mysum(1,2,3,4,5)
4.关键字参数
def getStuInfo(name,age,**kwargs):
"""
**kwargs:是一个字典;可以传递任意多的key-value对
:param name:
:param age:
:param kwargs:
:return:
"""
print name,age
print kwargs
getStuInfo('westos',18,hobbies=['code','running'],gender ='female')
4、函数的返回值
#返回值:函数运算的结果,还需要进一步操作时,给一个返回值
return用来返回函数执行结果的,如果没有返回值,默认为None
python可以间接返回多个值(返回了一个元组)
一旦遇到return,函数执行结束,后面的代码不会执行
def mypow(x, y=2):
return x ** y, x + y
print 'hello'
# pass
# 对元组进行解包
a,b = mypow(3)
print a,b
map参数:
def f(x):
return x*x
# map()传入的第一个参数是一个函数,第二个参数是一个序列
print map(f,[1,2,3,4])
print map(lambda x:x*x,[1,2,3,4])
5、装饰器:
"在不改变原函数的基础上,给函数增加功能"
把一个函数当作参数,返回一个替代版的函数
本质上:返回函数的函数
def func1():
print 'have a nice day!'
def func2():
print 'good luck!'
def outer(func):
def inner():
print '*********'
func()
print '&&&&&&&&&&&&'
return inner
func1 = outer(func1)
func1()
def say(age):
print 'man is %d years old' % age
def outer(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
# "化妆过的函数"
say = outer(say)
# 其实是调用的新的函数
say(-10)
6、语法糖
def desc(fun):
def add_info():
print '中秋快乐'
fun()
print '北京欢迎你'
return add_info
# 语法糖
@desc
def login():
# print '中秋快乐...'
print 'login....'
# print '北京欢迎你...'
@desc # logout=desc(logout)
def logout():
print 'logout....'
@desc
def savemoney():
print '存钱...'
@desc
def transferMoney():
print '转账....'
# def ..
login()
logout()
savemoney()
transferMoney()
注意:
def desc(fun):
def add_info():
print '中秋快乐'
fun()
print '北京欢迎你'
return add_info
@desc
def login():
print 'logoin....'
login()
"""上下两个意思相同,装饰器的表达方式和语法糖的表达方式"""
def desc(fun):
def add_info(): print '中秋快乐' fun() print '北京欢迎你' return add_info def logout(): print 'logout....' logout()
logout = desc(logout)
logout()