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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python符号】python里的@符号含义(详解)

發布時間:2024/1/18 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python符号】python里的@符号含义(详解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@作為修飾符

這是最難理解的一個含義。咱們看下面這個示例代碼:

def funB(funA):print("in funB")return "return from FunB()"@funB def funA():print("in FunA")return "return from FunA()"

第一,@funB等價于funB(funA)

@funB這里的funB就是修飾函數,用來修飾輸入進來的函數,所以funB的參數是一個函數,也就是這里的funA。直接運行以上代碼,得到的輸出如下:

in funB

也就是說,程序進入了funB函數。

第二,修飾函數返回的是修飾完的函數

重點啊!這是理解修飾符含義的核心!修飾函數返回的是修飾完的函數!!!
在 上面的例子,funB返回的是修改后的funA函數,也就是說,修改后funA = "return from FunB()"變成字符串了!!啥?你不信?運行下面代碼看看結果!

def funB(funA):print("in funB")return "return from FunB()"# @funB def funA():print("in FunA")return "return from FunA()"print(funA)

我們把@funB注釋掉,先看一下沒有修飾的情況下,funA是個什么東西。理論上輸出的是一個function對象。輸出:

<function funA at 0x0000016CB7AD0CA0>

果然沒錯。
再看看加上修飾后的結果:

in funB return from FunB()

輸出的第一行in funB是之前所說進入funB函數內print的內容;第二行就是print(funA)的輸出結果,可見funA = "return from FunA()",是一個字符串,而不是函數對象。

那如果我們希望輸出的還是一個函數怎么辦?按照剛才的邏輯,只要修飾函數funB返回的還是一個函數即可。例如:

def funB(funA):print("in funB")return funA@funB def funA():print("in FunA")return "return from FunA()"print(funA)

輸出結果為:

in funB <function funA at 0x0000019B3CCA0D30>

第三,先修飾后調用

剛才那些例子中,程序都沒進入到funA函數中,如果我們要在修飾后正常調用進入funA怎么辦?舉個例子:

def funB(funA):print("in funB")return funA@funB def funA():print("in FunA")return "return from FunA()"funA()

輸出結果為:

in funB in FunA

可見它的邏輯是:先運行到@funB等價運行funB(funA),進入funB后打印in funB,返回的修飾后的函數還是funA,然后再運行到最后一行的funA()進入funA函數內打印in funA。總結來講就是先修飾后調用

若我們把最后一行的funA()改為print(funA()),那么funA函數返回的"return from FunA()"字符串也會被打印出來,輸出結果如下:

in funB in FunA return from FunA()

@作為運算符

用于向量、矩陣乘法,等價于np.dot。直接看下面的例子:

import numpy as npnum1 = np.array([1,2,3]) num2 = np.array([[1,2,3]]) print(num1.shape) print(num2.shape) print('==============') print(num1 @ num1) print(num2 @ num2.T) print(num2.T @ num2) print('==============') print(np.dot(num1, num1)) print(np.dot(num2, num2.T)) print(np.dot(num2.T, num2))

輸出結果:

(3,) (1, 3) ============== 14 [[14]] [[1 2 3][2 4 6][3 6 9]] ============== 14 [[14]] [[1 2 3][2 4 6][3 6 9]]

自行體會~

總結

以上是生活随笔為你收集整理的【Python符号】python里的@符号含义(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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