日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数及装饰器

發(fā)布時間:2023/11/27 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数及装饰器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、函數(shù)

?# 定義函數(shù)
?# 如果不主動調用函數(shù),函數(shù)是不會執(zhí)行的
?def say_hello():
???? print 'hello1'
???? print 'hello2'
???? print 'hello3'

?# 函數(shù)的調用
?say_hello()


?def sum_2_sum():
???? """對兩個數(shù)字的求和"""
???? num1 = 20
???? num2 = 20
???? result = num1 + num2
? ? print '%d + %d = %d' %(num1,num2,result)

?sum_2_sum()

?

"""
函數(shù)參數(shù)的使用
在函數(shù)名后面的小括號內填寫 參數(shù)
多個參數(shù)之間使用 , 分隔
"""
# 定義函數(shù)時的變量,叫形參 形參可以任意起名字
def sum_2_sum(num1,num2):
??? """

??? :param num1:
??? :param num2:
??? :return:

??? """
??? result = num1 + num2
??? print '%d + %d = %d' %(num1,num2,result)

# 在調用函數(shù)的時候
# 在調用函數(shù)時傳遞得參數(shù)稱為實參(真實的數(shù)據信息)
sum_2_sum(5,20)

2、函數(shù)變量的作用域

局部變量:在函數(shù)內部定義的普通變量,只在函數(shù)內部作用,函數(shù)執(zhí)行結束
變量會自動刪除
全局變量

#通過變量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 '在函數(shù)內部%d對應的內存地址是%d' %(num,id(num))
??? result = 'hello'
??? print '函數(shù)要返回的數(shù)據的內存地址是 %d' %id(result)
??? return result

a = 10
print 'a變量保存數(shù)據的內存地址是%d' %id(a)

r = test(a)
print '%s 的內存地址是 %d' %(r,id(r))

?

3、函數(shù)形參之四大參數(shù):

參數(shù):形參 實參
形參:位置參數(shù) 默認參數(shù) 可變參數(shù) 關鍵字參數(shù)
1.位置參數(shù):形參和實參個數(shù)必須保持一致
?def getInfo(name,age):
???? print name,age
?getInfo(age=12,name='westos')



2.默認參數(shù):形參和實參的個數(shù)可以不一致
?def mypow(x,y=2):

???? 求x的y次方,y的值默認為2
???? :param x:
???? :param y:
???? :return:
???? """
???? print x**y
?mypow(4)
?# 默認形參可以改變
?mypow(4,3)

3.可變參數(shù)
?def mysum(*agrs):
???? """
???? *args:是可變參數(shù)
????? args:是元組類型數(shù)據
????? 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.關鍵字參數(shù)
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、函數(shù)的返回值

#返回值:函數(shù)運算的結果,還需要進一步操作時,給一個返回值
return用來返回函數(shù)執(zhí)行結果的,如果沒有返回值,默認為None
python可以間接返回多個值(返回了一個元組)
一旦遇到return,函數(shù)執(zhí)行結束,后面的代碼不會執(zhí)行

def mypow(x, y=2):
??? return x ** y, x + y
??? print 'hello'
??? # pass

# 對元組進行解包
a,b = mypow(3)
print a,b

map參數(shù):

def f(x):
??? return x*x
# map()傳入的第一個參數(shù)是一個函數(shù),第二個參數(shù)是一個序列
print map(f,[1,2,3,4])

print map(lambda x:x*x,[1,2,3,4])

5、裝飾器:
"在不改變原函數(shù)的基礎上,給函數(shù)增加功能"
把一個函數(shù)當作參數(shù),返回一個替代版的函數(shù)
本質上:返回函數(shù)的函數(shù)


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

# "化妝過的函數(shù)"
say = outer(say)
# 其實是調用的新的函數(shù)
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_infodef logout():print 'logout....'
logout()

logout = desc(logout)

logout()

?

?

?

?

?

總結

以上是生活随笔為你收集整理的函数及装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:函数及装饰器