當前位置:首頁 » 編程語言 » python修飾函數

python修飾函數

發布時間: 2023-10-03 15:53:20

python 中 @ 是什麼意思

修飾符,比如說

class A:

@staticmethod

def m(self):

pass

就相當於

class A:

def m(self):

pass

m = staticmethod(m)

其實就是一調用一個函數參數為下行的變數,並且替換它

(1)python修飾函數擴展閱讀:

函數修飾符

@用做函數的修飾符,可以在模塊或者類的定義層內對函數進行修飾,出現在函數定義的前一行,不允許和函數定義在同一行。

一個修飾符就是一個函數,它將被修飾的函數作為參數,並返回修飾後的同名函數或其他可調用的東西。

在Python的函數中偶爾會看到函數定義的上一行有@functionName的修飾,當解釋器讀到@這樣的修飾符的時候會優先解除@後的內容,直接就把@的下一行的函數或者類作為@後邊函數的參數,然後將返回值賦給下一個修飾的函數對象。

❷ python函數里定義的類

#Python 2.5
#這個可以用修飾器來完成
#但是一般不會限制參數類型
#給你個思路:

def argfilter(*types):
def deco(func): #這是修飾器
def newfunc(*args): #新的函數
if len(types)==len(args):
correct = True
for i in range(len(args)):
if not isinstance(args[i], types[i]): #判斷類型
correct = False
if correct:
return func(*args) #返回原函數值
else:
raise TypeError
else:
raise TypeError
return newfunc #由修飾器返回新的函數
return deco #返回作為修飾器的函數

@argfilter(int, str) #指定參數類型
def func(i, s): #定義被修飾的函數
print i, s

#之後你想限制類型的話, 就這樣:
#@argfilter(第一個參數的類名, 第二個參數的類名, ..., 第N個參數的類名)
#def yourfunc(第一個參數, 第一個參數, ..., 第N個參數):
# ...
#
#相當於:
#def yourfunc(第一個參數, 第一個參數, ..., 第N個參數):
# ...
#yourfunc = argfilter(第一個參數的類名, 第二個參數的類名, ..., 第N個參數的類名)(yourfunc)

❸ Python 中的 classmethod 和 staticmethod 有什麼具體用途

classmethod:類方法
staticmethod:靜態方法

在python中,靜態方法和類方法都是可以通過類對象和類對象實例訪問。但是區別是:

@classmethod 是一個函數修飾符,它表示接下來的是一個類方法,而對於平常我們見到的則叫做實例方法。類方法的第一個參數cls,而實例方法的第一個參數是self,表示該類的一個實例。

普通對象方法至少需要一個self參數,代表類對象實例

類方法有類變數cls傳入,從而可以用cls做一些相關的處理。並且有子類繼承時,調用該類方法時,傳入的類變數cls是子類,而非父類。對於類方法,可以通過類來調用,就像C.f(),有點類似C++中的靜態方法, 也可以通過類的一個實例來調用,就像C().f(),這里C(),寫成這樣之後它就是類的一個實例了。

靜態方法則沒有,它基本上跟一個全局函數相同,一般來說用的很少

Example 1:

>>>classa():
@staticmethod
defstaticm():
print'static'
defnormalm(self):
print'nomarl',self
@classmethod
defclassm(cls):
print'class',cls


>>>a1=a()
>>>a1.normalm()
nomarl<__main__.ainstanceat0x84dddec>
>>>a1.staticm()
static
>>>a1.classm()
class__main__.a
>>>type(a)
<type'classobj'>
>>>type(a1)
<type'instance'>


Example 2:

classA(object):
@classmethod
defcm(cls):
print'類方法cm(cls)調用者:',cls.__name__
@staticmethod
defsm():
print'靜態方法sm()被調用'
classB(A):
pass
A.cm()
B.cm()
A.sm()
B.sm()
輸出:
類方法cm(cls)調用者:A
類方法cm(cls)調用者:B
靜態方法sm()被調用
靜態方法sm()被調用


@classmethod與@staticmethod的應用實例

#!/usr/bin/envpython
#-*-coding:utf-8-*-
classTClassStatic(object):
obj_num=0
def__init__(self,data):
self.data=data
TClassStatic.obj_num+=1
defprintself(self):
print("self.data:",self.data)
@staticmethod
defsmethod():
print("thenumberofobjis:",TClassStatic.obj_num)
@classmethod
defcmethod(cls):
print("cmethod:",cls.obj_num)
cls.smethod()
defmain():
objA=TClassStatic(10)
objB=TClassStatic(12)
objB.printself()
objA.smethod()
objB.cmethod()
print("------------------------------")
TClassStatic.smethod()
TClassStatic.cmethod()
if__name__=="__main__":
main()

輸出結果如下:

('self.data:',12)
('thenumberofobjis:',2)
('cmethod:',2)
('thenumberofobjis:',2)
------------------------------
('thenumberofobjis:',2)
('cmethod:',2)
('thenumberofobjis:',2)

❹ python所有內置函數的定義詳解

1、定義函數

函數是可重用的程序。本書中已經使用了許多內建函數,如len()函數和range()函數,但是還沒自定義過函數。定義函數的語法格式如下:

def 函數名(參數):

函數體

定義函數的規則如下:

①關鍵字def用來定義一個函數,它是define的縮寫。

②函數名是函數的唯一標識,函數名的命名規則遵循標識符的命名規則。

③函數名後面一定要緊跟著一個括弧,括弧內的參數是可選的,括弧後面要有冒號。

④函數體(statement)為一個或一組Python語句,注意要有縮進。

⑤函數體的第一行可以有文檔字元串,用於描述函數的功能,用三引號括起來。

按照定義規則,可以定義第一個函數了:

  • >>>defhello_world():

  • ...print('Hello,world!')#注意函數體要有縮進

  • ...

  • >>>hello_world()

  • Hello,world!

  • 這個函數不帶任何參數,它的功能是列印出「Hello,world!」。最後一行代碼hello_world()是調用函數,即讓Python執行函數的代碼。

    2、全局變數和局部變數

    全局變數是定義在所有函數外的變數。例如,定義一個全局變數a,分別在函數test1()和test2()使用變數a:

  • >>>a=100#全局變數

  • >>>deftest1():

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 100

  • >>>test2()

  • 100

  • 定義了全局變數a之後,在函數test1()和test2()內都可以使用變數a,由此可知,全局變數的作用范圍是全局。

    局部變數是在函數內定義的變數,除了用關鍵字global修飾的變數以外。例如,在函數test1()內定義一個局部變數a,分別在函數外和另一個函數test2()內使用變數a:

  • >>>deftest1():

  • ...a=100#局部變數

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 100

  • >>>print(a)

  • Traceback(mostrecentcalllast):

  • File"<stdin>",line1,in<mole>

  • NameError:name'a'isnotdefined

  • >>>test2()

  • Traceback(mostrecentcalllast):

  • File"<stdin>",line1,in<mole>

  • File"<stdin>",line2,intest2

  • NameError:name'a'isnotdefined

  • Python解釋器提示出錯了。由於局部變數a定義在函數test1()內,因此,在函數test1()內可以使用變數a,但是在函數外或者另一個函數test2()內使用變數a,都會報錯,由此可見,局部變數的作用范圍是定義它的函數內部。

    一般情況下,在函數內聲明的變數都是局部變數,但是採用關鍵字global修飾的變數卻是全局變數:

  • >>>deftest1():

  • ...globala#全局變數

  • ...a=100

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 100

  • >>>print(a)

  • 100

  • >>>test2()

  • 100

  • 這個程序與上個程序相比,只是在函數test1()中多了一行代碼「global a」,程序便可以正確運行了。在函數test1()中,採用關鍵字global修飾了變數a之後,變數a就變成了全局變數,不僅可以在該函數內使用,還可以在函數外或者其他函數內使用。

    如果在某個函數內局部變數與全局變數同名,那麼在該函數中局部變數會覆蓋全局變數:

  • >>>a=100#全局變數

  • >>>deftest1():

  • ...a=200#同名局部變數

  • ...print(a)

  • ...

  • >>>deftest2():

  • ...print(a)

  • ...

  • >>>test1()

  • 200

  • >>>test2()

  • 100

  • 由於在函數test1()中定義了一個與全局變數同名的局部變數a,因此,在函數test1()中全局變數a的值被局部變數覆蓋了,但是在函數test2()中全局變數a的值沒有被覆蓋。

    綜上所述,在Python中,全局變數保存的數據供整個腳本文件使用;而局部變數只用於臨時保存數據,變數僅供局部代碼塊使用。

❺ python的高級特徵及用法介紹

【導讀】Python 是一種美麗的語言,它簡單易用卻非常強大。任何編程語言的高級特徵通常都是通過大量的使用經驗才發現的。比如你在編寫一個復雜的項目,並在
stackoverflow 上尋找某個問題的答案,然後你突然發現了一個非常優雅的解決方案,它使用了你從不知道的 Python
功能,下面就給大家進行python的高級特徵及用法介紹。

1、Map 函數

Map() 是一種內置的 Python
函數,它可以將函數應用於各種數據結構中的元素,如列表或字典。對於這種運算來說,這是一種非常干凈而且可讀的執行方式。

2、Lambda 函數

Lambda 函數是一種比較小的匿名函數——匿名是指它實際上沒有函數名。

Python 函數通常使用 def a_function_name() 樣式來定義,但對於 lambda 函數,我們根本沒為它命名。這是因為 lambda
函數的功能是執行某種簡單的表達式或運算,而無需完全定義函數。

lambda 函數可以使用任意數量的參數,但表達式只能有一個。

3、Generator 函數

Generator 函數是一個類似迭代器的函數,即它也可以用在 for 循環語句中。這大大簡化了你的代碼,而且相比簡單的 for
循環,它節省了很多內存。

4、Filter 函數

filter 內置函數與 map 函數非常相似,它也將函數應用於序列結構(列表、元組、字典)。二者的關鍵區別在於 filter() 將只返回應用函數返回
True 的元素。

5、Itertools 模塊

Python 的 Itertools 模塊是處理迭代器的工具集合。迭代器是一種可以在 for 循環語句(包括列表、元組和字典)中使用的數據類型。

使用 Itertools 模塊中的函數讓你可以執行很多迭代器操作,這些操作通常需要多行函數和復雜的列表理解。

以上就是python的高級特徵及用法介紹,希望對於大家的python學習能有所幫助,想要學習更多的python高級技能,希望大家持續關注!

熱點內容
sql表添加記錄 發布:2025-02-01 11:22:08 瀏覽:864
word編輯加密 發布:2025-02-01 11:18:53 瀏覽:571
php變數文本 發布:2025-02-01 11:10:46 瀏覽:426
音悅台上傳mv 發布:2025-02-01 11:05:02 瀏覽:516
微信如何設置訪問限制 發布:2025-02-01 10:43:06 瀏覽:335
b站緩存視頻下架還有嗎 發布:2025-02-01 10:37:52 瀏覽:940
e卡通初始密碼是多少 發布:2025-02-01 10:31:55 瀏覽:127
phppost上傳文件 發布:2025-02-01 10:26:42 瀏覽:105
伺服器不能寫入ip地址 發布:2025-02-01 10:18:56 瀏覽:129
青驕如何重置賬號密碼 發布:2025-02-01 09:57:51 瀏覽:520