【Python】@的用法

funA和funA()是不一样的:

前者funA表示函数申明;

后者funA()表示函数执行,print(funA())即表示打印该函数返回的结果,如果没有申明返回值,那么返回值默认为None。

python中@的用法

@是一个装饰器,针对函数,起调用传参的作用。 
有修饰和被修饰的区别,‘@function'作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义)。

代码1

def funA(desA):
 print("It's funA")
 
def funB(desB):
 print("It's funB")
 
@funA
def funC():
 print("It's funC")

结果1

It's funA

分析1

@funA 修饰函数定义def funC(),将funC赋值给funA()的形参。 
执行的时候由上而下,先定义funA、funB,然后运行funA(funC)。 
此时desA=funC,然后funA()输出‘It's funA'。

代码2

def funA(desA):
 print("It's funA")
 
def funB(desB):
 print("It's funB")
 
@funB
@funA
def funC():
 print("It's funC")

结果2

It's funA 
It's funB

分析2

@funB 修饰装饰器@funA,@funA 修饰函数定义def funC(),将funC赋值给funA()的形参,再将funA(funC)赋值给funB()。 
执行的时候由上而下,先定义funA、funB,然后运行funB(funA(funC))。 
此时desA=funC,然后funA()输出‘It's funA';desB=funA(funC),然后funB()输出‘It's funB'。

代码3

def funA(desA):
 print("It's funA")
 
 print('---')
 print(desA)
 desA()
 print('---')
 
def funB(desB):
 print("It's funB")
 
@funB
@funA
def funC():
 print("It's funC")

结果3

It's funA
---
<function funC at 0x0000028CD8ABE558>
It's funC
---
It's funB

分析3

同上,为了更直观地看参数传递,打印desA,其传的是funC函数,funC函数并没有被执行。 
执行desA()即执行funC(),desA=funC,desA()=funC()。

代码4

def funA(desA):
 print("It's funA")
 
def funB(desB):
 print("It's funB")
 print('---')
 print(desB)
 
@funB
@funA
def funC():
 print("It's funC")

结果4

It's funA
It's funB
---
None

分析4

上面将funC作为参数传给funA,那么funA(funC)传给funB()。
因此这里就可以理解为funC传给funA,然后funA被执行,然后funA(funC)传给了funB,funB被激活执行,此时funA(funC)就为desB,不难看出funA(funC)没有返回值,所以funA(funC)为None,即desB就为None。

代码5

def funA(desA):
 print("It's funA")
 return 3
 
def funB(desB):
 print("It's funB")
 print('---')
 print(desB)
 
@funB
@funA
def funC():
 print("It's funC")

结果5

It's funA
It's funB
---
3

解析5

上面将funC作为参数传给funA,这时构成了funA(func),再将funA(func)又传给funB(),这时desB为funA(func)。

所以执行顺序为,funA先执行,然后返回了一个参数,这时funA(func)的返回值即为3,所以desB就为3。

  • 12
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,@符号被用作矩阵乘法运算符。它的功能与numpy.dot()相同,用于执行矩阵的乘法操作。在Python 3.5之后,@运算符被引入并具备了矩阵乘法的功能。可以通过使用@运算符来执行矩阵的乘法操作,而不需要使用numpy.dot()函数。举个例子: ``` from numpy import array a = array([[1, 2], [1, 2]]) b = array([[5, 6], [5, 6]]) print(a @ b) ``` 这段代码会输出矩阵a和b的乘积结果。因此,Python中的@运算符允许我们直接进行矩阵乘法的计算。 需要注意的是,@运算符的功能在传统Python中通常是作为装饰器使用的,但在Python 3.5及以后版本,它也获得了矩阵乘法的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python@运算符 numpy矩阵相乘](https://blog.csdn.net/jacke121/article/details/128425452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [python中@运算符和*运算符在矩阵乘法中的区别与作用](https://blog.csdn.net/weixin_44120025/article/details/122373000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值