在调用一些Python里的函数的时候 为啥有些函数需要实例化有些不需要?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在调用一些Python里的函数的时候 为啥有些函数需要实例化有些不需要?相关的知识,希望对你有一定的参考价值。

from PIL import Image
from torchvision import transforms

img_path = "E:/Pytorch/project1/ants/36439863_0bec9f554f.jpg"
img = Image.open(img_path)

# Totersor
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)

例如这几行里面 Image.open(img_path)就可以直接往括号里面扔参数, 但是transforms.ToTensor()就需要先实例化给tensor_trans 再往里面扔参数呢

参考技术A 如果一个方法是静态方法或类方法,那么,可以直接调用。
如果一个方法不是静态的,那么,它会需要self来访问实例中的某些属性,那么就只能在实例上调用。
你给出的代码中,tensor_trans = transforms.ToTensor()这一句,实际上只是简化引用,并没有实例化transforms。
作为示例:
class MyUtil(object):
....@staticmethod

....def fn1():
........return 'a'

....def fn2(self):

........return 'b'
对方法fn1,我们可以直接调用:
x = MyUtil.fn1()
但对于fn2,则只能实例化后调用:
util=MyUtil()
x = util.fn2()
当然,对于fn1,也可以在实例上调用:
util=MyUtil()
x = util.fn1()追问

那么如何判断这些库函数中那些是可以直接调用的呢?

追答

pycharm中,可以ctrl+鼠标点击调用点(或在调用处按Ctrl+B)以跳转到相应的源代码,如果相应的方法有@staticmethod或@classmethod,则可以直接以【类名.方法名】的形式调用。

求助c语言大佬们,急! 为啥我多次调用函数,然而输出的时候只有第一层函数输出了,后几层的都没有输

求助c语言大佬们,急!
为什么我多次调用函数,然而输出的时候只有第一层函数输出了,后几层的都没有输如图,函数学的不怎么样,求解大佬们,真的有点急。。

void F();是声明函数F(),调用函数F()直接F();追问

不懂,可以讲具体点么,学的不怎么好,,,,

追答

去掉所有case里的void。

追问

谢谢,那是不是函数可以无限的套用,当最外层函数被调用的时候里面每一层函数的输出都会成功输出在界面上

追答

栈空间是有限的(VC6默认为1M),过多的函数嵌套或递归调用会导致栈溢出。

追问

那也就是说除了“无限套用”这句是错的,其他的都是对的对吧,

十分感谢

参考技术A 你的那个参数a数值有没有改变?另外没有循环重复调用,switch(a)只执行case a值到第一个break那段,而且函数调用前面不用再加void修饰符了

以上是关于在调用一些Python里的函数的时候 为啥有些函数需要实例化有些不需要?的主要内容,如果未能解决你的问题,请参考以下文章

ucos里的hook函数是啥?为啥要有这些函数?干啥用的?

python定义函数为啥一定要有参数

为啥python的函数没被调用就被执行了?

求助c语言大佬们,急! 为啥我多次调用函数,然而输出的时候只有第一层函数输出了,后几层的都没有输

python学习笔记2---函数

为啥不包含头文件却可以调用函数,谁来解释