如何在Python 3中使用特殊字符定义函数名称

时间:2018-01-13 21:13:42

标签: python-3.x function

我想创建一个名为'〜'的函数,所以它会是这样的:

def ~(*args):

但它给了我语法错误,我该如何解决?

顺便说一句,我已经尝试了def '~'(*args)但它不起作用。

2 个答案:

答案 0 :(得分:3)

你不能:'〜'不是Python标识符的有效字符。

Python docs on (2.3. Identifiers and keywords),'〜'是ASCII 0x7E,它在U + 0001..U + 007F范围内,其中有效字符限制为大写和小写字母A到Z,下划线_和,除了第一个字符,数字0到9.这是因为此范围中的某些其他字符用于语言语法的其他部分(例如运算符+-和确实~:按位补充)

Python 3确实允许来自此范围之外的Unicode标识符,因此(如果确实必须),您可以使用单个Unicode字符,例如

def ϖ(*args):
    ...

但是,当然,使用键盘上没有的字符编写代码更难。

正如Jean-FrançoisFabre在他的回答中所写,如果你准备稍微改变一下调用语法,你可以做一些类似于你想要的事情:声明一个用你的参数初始化的类并覆盖{{ 1}}运算符(使用~)作为您的函数。例如:

__invert__

但是在这里你必须假装反转你的class Z: def __init__(self, *args): self.args = args def __invert__(self): print('args are:', self.args) # ... do something with args In [3]: ~( Z(4,5) ) args are: (4, 5) 类的一个实例而不是用一个参数元组调用一个函数。这对我来说并不合适。

答案 1 :(得分:2)

在对象的情况下,您可以定义special method names以在应用于自定义类时重新定义大多数运算符

class Test:
    def __init__(self,x):
        self.x = x
    def __invert__(self):
        return ~self.x

a = Test(12)
print(~a)

我得到12的补码:-13,因为我定义了在我的自定义对象上应用__invert__时调用的特殊~函数。