#python #syntax
Вопрос:
Есть ли способ запустить функцию Python, просто введя одно слово без скобок? Я замечаю, что вы не можете просто назначить его как x = function()
функцию, так как это было бы значением функции в данный момент.
Разве вы не можете назначить выполнение функции, соответствующей переменной?
Комментарии:
1. Как насчет того, чтобы попробовать сначала?
2. Вы задаете два разных вопроса… один о запуске (он же вызов ) функции, а другой о назначении функции переменной. Вы можете назначить , просто выполнив
x = function
, затем вы можете вызвать его с помощью илиx()
илиfunction()
.3. @MarcinOrlowski — как бы вы попробовали, если бы не знали, что попробовать?
4. @MarcinOrlowski это довольно несправедливо, учитывая, насколько маловероятно, что вы даже знаете, о чем просит ОП. Я не. Похоже, они просят «запустить функцию Python, просто введя одно слово без скобок». Я не думаю, что это можно сделать, но поиск негатива на самом деле не так прост.
5. …что приведет вам множество примеров назначения функции переменной и ничего не скажет вам о том, как » запустить функцию Python, просто введя одно слово без скобок».
Ответ №1:
Не то чтобы я мог представить себе какое-либо разумное применение для этого, но вы могли бы подкласс string и переопределить метод представления, чтобы выполнить какой-то побочный эффект..
In [15]: class StringWithSideEffect(str):
...: def __repr__(self):
...: print("foo")
...: return super().__repr__()
...:
In [16]: x = StringWithSideEffect("bar")
In [17]: x
Out[17]: foo
'bar'
Комментарии:
1. С большой властью приходит большая ответственность.
Ответ №2:
насколько я знаю, нет такой вещи, как назначение вызова функции переменной.
однако с помощью встроенного property
класса python вы можете назначить вызов функции атрибуту класса:
class FunctionHook:
def __init__(self, func, *args, **kwargs):
# args and kwargs are the arguments passed into the function
self.func = func
self.args = args
self.kwargs = kwargs
@property
def get(self): # or however you want to name the relevant attribute
return self.func(*self.args, **self.kwargs)
# testing
if __name__ == '__main__':
import random
a = FunctionHook(random.random)
for _ in range(5):
print(a.get)
b = FunctionHook(random.randint, 13, 31)
for _ in range(5):
print(b.get)
выход:
0.8434998046303654
0.2421758878321828
0.10999563726010275
0.3725559440217763
0.1906822598056529
29
28
27
31
13