[英]How to change a global variable without global keyword using a button in tkinter?
[英]Changing a global variable in a function without using global keyword
這是我的代碼:
def L_value_Change(k):
global L
L = k
return L
def applyF_filterG(L, f, g):
L
k = []
for i in L:
if g(f(i)):
k.append(i)
L = k
L_value_Change(k)
if L == []:
return -1
else :
return max(L)
當我輸入此代碼時,評分員告訴我這是不正確的! 因此,我閱讀了測驗的簡介,講師寫了“全局變量不起作用”。 如何在不使用單詞global
情況下使用函數更改L
變量? 如果您嘗試我的代碼並提供所需的輸入,它將為您提供正確的答案,但評分員告訴我這是錯誤的。
要將全局變量重新綁定到其他對象時,需要使用global
關鍵字。 但是,如果您要做的只是更改可變對象,則不需要它。 在您的情況下, L
是一個列表,可以使用切片操作L[:] = k
進行適當地突變。 展示:
>>> L = [1,2,3]
>>>
>>> def L_value_Change(k):
... L[:] = k
...
>>> old_id = id(L)
>>> L
[1, 2, 3]
>>> L_value_Change([4,5,6])
>>> assert id(L) == old_id
>>> L
[4, 5, 6]
>>>
列表是可變的對象,因此,要更改它們,只需將它們作為函數的參數傳遞即可。
def f(i):
return i + 2
def g(i):
return i > 5
l = [0, -10, 5, 6, -4]
def applyF_filterG(L, f, g):
for val in L[:]:
if not g(f(val)):
L.remove(val)
return -1 if not L else max(L)
print(l) # [0, -10, 5, 6, -4]
applyF_filterG(l, f, g) # Return 6
print(l) # [5, 6]
這是我的代碼,可避免在您要迭代的列表上進行變異。
def applyF_filterG(L,f,g):
"""
Assumes L is a list of integers
Assume functions f and g are defined for you.
f takes in an integer, applies a function, returns another integer
g takes in an integer, applies a Boolean function,
returns either True or False
Mutates L such that, for each element i originally in L, L contains
i if g(f(i)) returns True, and no other elements
Returns the largest element in the mutated L or -1 if the list is empty
"""
# Applying the functions & Mutating L
i = len(L)-1
largestnum=0
if (len(L)==0):
return -1
else:
while i>=0:
if not g(f(L[i])):
del L[i]
i-=1
#Finding the largest number
if not L:
return -1
if (len(L)==1):
return L[0]
else:
for num in range(len(L)-1):
if (L[num]>L[num+1]):
largestnum=L[num]
else:
largestnum=L[num+1]
return largestnum
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.