极品召唤兽 发表于 2020-7-21 19:28:37

关于函数()

为什么def的函数都有()??
既然可以没有参数 为什么还必须有括号?
不太明白

zltzlt 发表于 2020-7-21 19:30:40

这就是规定,必须要这样做

赚小钱 发表于 2020-7-21 19:32:35

如果你不喜欢 (),请移步 ruby

Twilight6 发表于 2020-7-21 19:33:43



语法规则呗,学习每个编程都需要遵循他的语法规则

BIO-张磊 发表于 2020-7-21 19:34:43

本帖最后由 BIO-张磊 于 2020-7-21 19:37 编辑

是游戏规则。 假如不加括号,你不觉得奇怪吗?
比如
def foo:
        xxxx

这个foo到底是什么意思?是变量名还是函数?

此外,函数定义必须加括号的规则,我们再调用的时候,可以保证获取返回值(加括号),或函数体本身(不加括号)

livcui 发表于 2020-7-21 19:35:39

语法就是这样,
但也有道理,
不然if i:
        print("hello world")
怎么分辨i是变量还是函数

昨非 发表于 2020-7-21 19:48:07

语法规则,调用时可以没有def ,但必须有()

永恒的蓝色梦想 发表于 2020-7-21 19:49:28

livcui 发表于 2020-7-21 19:35
语法就是这样,
但也有道理,
不然


你说的没有道理,因为现在也没有办法分辨。

livcui 发表于 2020-7-21 20:14:40

永恒的蓝色梦想 发表于 2020-7-21 19:49
你说的没有道理,因为现在也没有办法分辨。

Python现在有后面接括号的变量吗?{:10_277:}

永恒的蓝色梦想 发表于 2020-7-21 20:50:18

livcui 发表于 2020-7-21 20:14
Python现在有后面接括号的变量吗?

多看书啦{:10_277:}>>> class Test:
    def __init__(self, func, /, *args, **kwargs):
      self.__func = func
      self.__args = args
      self.__kwargs = kwargs


    def __call__(self, *args, **kwargs):
      return self.__func(*self.__args, *args, **kwargs, **self.__kwargs)

>>> func = Test(filter, None)
>>> func(range(3))
<filter object at 0x0000000000000000>
>>> list(_)
>>> def function():
    pass

>>> if function:
    print("Yahoo!")

   
Yahoo!

wuqramy 发表于 2020-7-21 20:57:32

BIO-张磊 发表于 2020-7-21 19:34
是游戏规则。 假如不加括号,你不觉得奇怪吗?
比如
def foo:


不奇怪,类就可以不打括号{:10_256:}
只是一个单纯的规定

我真的是个好人 发表于 2020-7-21 20:58:39

没啥为什么的,这是语法规则,照做就完了

极品召唤兽 发表于 2020-7-21 22:08:05

BIO-张磊 发表于 2020-7-21 19:34
是游戏规则。 假如不加括号,你不觉得奇怪吗?
比如
def foo:


此外,函数定义必须加括号的规则,我们再调用的时候,可以保证获取返回值(加括号),或函数体本身(不加括号)
能详细一点吗...
举个荔枝?

livcui 发表于 2020-7-21 22:30:40

永恒的蓝色梦想 发表于 2020-7-21 20:50
多看书啦

好吧,我大意了,可能我没学好Python对象吧,
一开始我只想把函数和变量对比,但看到你的if function:
    print("Yahoo!")
我才知道Python的函数名竟然也可以当做地址来用,
之前学Python看来一本渣书,讲的很烂,
所以我想请教一下,这样做跟C/C++不一样,似乎有点废,那到底有什么用呢?

永恒的蓝色梦想 发表于 2020-7-21 22:34:47

livcui 发表于 2020-7-21 22:30
好吧,我大意了,可能我没学好Python对象吧,
一开始我只想把函数和变量对比,但看到你的
我才知道Pyth ...

这不是地址,Python 中都是对象。
没用。因为所有函数判断都为真。

永恒的蓝色梦想 发表于 2020-7-21 22:37:01

BIO-张磊 发表于 2020-7-21 19:34
是游戏规则。 假如不加括号,你不觉得奇怪吗?
比如
def foo:


你这个说的……我只能说……没啥道理……

livcui 发表于 2020-7-21 22:44:08

>>> def test() :
        pass

>>> print(test)
<function test at 0x0000000003BD1CF8>
可... 似乎test就是代表函数数组的地址啊
莫非Python的if不把它转化为bool类型?

BIO-张磊 发表于 2020-7-21 22:53:23

永恒的蓝色梦想 发表于 2020-7-21 22:37
你这个说的……我只能说……没啥道理……

这方面我研究不深,我个人的意思是,从游戏规则考虑一下,为什么python设计定义函数的时候必须要括号。

比如print函数,我们再print()时有返回值是空,而单纯的print是没有返回值的。这是两种功能(不知道这种说法准确不准确)
所以,从结果来推,我的想法是,假如定义的时候括号不是必须的。我们就丧失了print和print()体现的这一特殊功能。
python可能就不知道print和print()有什么区别。当然这是我的猜测,不知道对不对

永恒的蓝色梦想 发表于 2020-7-21 22:57:04

BIO-张磊 发表于 2020-7-21 22:53
这方面我研究不深,我个人的意思是,从游戏规则考虑一下,为什么python设计定义函数的时候必须要括号。
...

def 关键字是干什么的?

BIO-张磊 发表于 2020-7-21 23:04:03

永恒的蓝色梦想 发表于 2020-7-21 22:57
def 关键字是干什么的?

可能我表达的还是不清晰。

假如python允许
def foo:
   return 0
我们在输入foo的时候,是要他有返回值呢?还是没有返回值呢?
你可能会又问,我们要有返回值的时候输入foo()不就行了
那这种情况下,为什么不直接在定义的时候强制要求加呢?

当然这都是我的猜测,我也不知道这对不对。毕竟这是python的规则,为了一个规则而去揣摩是没有意义的。
页: [1] 2
查看完整版本: 关于函数()