我想创建一个名为'〜'的函数,所以它会是这样的:
def ~(*args):
但它给了我语法错误,我该如何解决?
顺便说一句,我已经尝试了def '~'(*args)
但它不起作用。
答案 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__
时调用的特殊~
函数。