[英]Python functions within lists
所以今天在計算機科學中我問過將函數用作變量。 例如,我可以創建一個函數,例如returnMe(i)
並創建一個用於調用它的數組。 像h = [help,returnMe]
然后我可以說h1,它會調用returnMe("Bob")
。 對不起,我對此感到有些興奮。 我的問題是有一種方法可以調用h.append(def function)
並定義一個只存在於數組中的函數嗎?
編輯:
這是我用這個寫的一些代碼! 所以我剛剛用這個解決方案完成了一個很棒的FizzBuzz,非常感謝你! 這是代碼的例子:
funct = []
s = ""
def newFunct(str, num):
return (lambda x: str if(x%num==0) else "")
funct.append(newFunct("Fizz",3))
funct.append(newFunct("Buzz",5))
for x in range(1,101):
for oper in funct:
s += oper(x)
s += ":"+str(x)+"\n"
print s
您可以使用lambda
關鍵字創建匿名函數。
def func(x,keyword='bar'):
return (x,keyword)
大致相當於:
func = lambda x,keyword='bar':(x,keyword)
因此,如果要創建包含函數的列表:
my_list = [lambda x:x**2,lambda x:x**3]
print my_list[0](2) #4
print my_list[1](2) #8
不是在Python中。 正如mgilson所示,您可以使用簡單的函數執行此操作,但它們只能包含表達式,而不能包含語句,因此非常有限(例如,您無法分配給變量)。
當然,這在其他語言中是受支持的:例如,在Javascript中,創建實質性的匿名函數並傳遞它們是非常慣用的事情。
您可以在原始范圍中創建函數,將它們分配給數組,然后從原始范圍中刪除它們。 因此,您確實可以從數組中調用它們,但不能將其作為局部變量。 我不確定這是否符合您的要求。
#! /usr/bin/python3.2
def a (x): print (x * 2)
def b (x): print (x ** 2)
l = [a, b]
del a
del b
l [0] (3) #works
l [1] (3) #works
a (3) #fails epicly
您可以創建一個lambda
函數列表,按0到9之間的每個數字遞增,如下所示:
increment = [(lambda arg: (lambda x: arg + x))(i) for i in range(10)]
increment[0](1) #returns 1
increment[9](10) #returns 19
邊注:
我認為同樣重要的是要注意這個(函數指針不是lambdas)有點像python如何在大多數類中保存方法,除了代替列表,它是一個函數名稱指向函數的字典。 在許多但並非所有情況下, instance.func(args)
等同於instance.__dict__['func'](args)
或type(class).__dict__['func'](args)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.