如何给函数内的局部变量赋值 Python?
How to give values for local variables inside the function Python?
我有以下功能:
def ex(filter, key, user):
login = user
secret = key
f1 = filter
"..." #many other comands
user = "some text"
key = "some numbers"
filter = "2017/10"
要应用我写的这个函数:
user = "some text"
key = "some numbers"
ex("2010/10",key,user)
这个函数没有任何问题。我的问题是如何让局部变量从全局变量中获取值?
所以我希望能够通过编写以下内容来应用我的代码:
user = "some text"
key = "some numbers"
ex("2017/10")
有什么建议吗?
更新
根据@v Sugumar 编写代码后。从 shell
调用函数
>>> import expens as e
>>> user = "XXX"
>>> key = "111"
>>> e.exp("08/2017")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\ad\Anaconda4\lib\expens.py", line 29, in exp
userid = user
NameError: name 'user' is not defined
>>>
有两种方法可以做到:
- 删除函数参数,它们将自动从全局范围中选取。阅读:Short Description of the Scoping Rules?
user = "some text"
key = "some numbers"
def ex(filter):
login = user
secret = key
- 给它们静态默认值或使用全局变量选择默认值。
user = "some text"
key = "some numbers"
def ex(filter, key="some numbers", user="some text"): # static defaults
def ex(filter, key=key, user=user): # defaults picked from global variables
- 根本不要修改该函数并使用应用了
user
和 key
的部分函数。
from functools import partial
ex_with_user_and_key = partial(ex, key="some numbers", user="some text")
ex_with_user_and_key("2017/10")
只需创建函数 def ex(filter):在此之前定义用户和密钥并使用函数中的变量。如果在函数中未找到变量,则将在封闭范围内搜索它,然后在全局作用域,然后在内置函数中,如果您不想更改函数内的全局变量,那么在使用它们之前不需要在变量名之前使用 global
像这样打电话
#file listdir.py
def ex(filter):
login = user
secret = key
f1 = filter
print(login)
print(secret)
user = "some text"
key = "some numbers"
ex("2017/10")
更新
#file listdir.py
def ex(filter,user,key):
login = user
secret = key
f1 = filter
print(login)
print(secret)
更新 2
确定然后定义变量
#file listdir.py
def ex(filter):
login = user
secret = key
f1 = filter
print(login)
print(secret)
定义函数为def ex(filter):
如果在本地范围内找不到全局变量,该函数将自动获取全局变量(感谢 Ashwini 指出您不需要使用 global
)。因此,您可以将函数定义为:
def ex(filter):
login = user
secret = key
f1 = filter
"..." #many other comands
然后在调用它的时候,只要传入filter
和user
,key
就会从全局作用域中获取。所以可以调用:
ex("2017/10")
我有以下功能:
def ex(filter, key, user):
login = user
secret = key
f1 = filter
"..." #many other comands
user = "some text"
key = "some numbers"
filter = "2017/10"
要应用我写的这个函数:
user = "some text"
key = "some numbers"
ex("2010/10",key,user)
这个函数没有任何问题。我的问题是如何让局部变量从全局变量中获取值? 所以我希望能够通过编写以下内容来应用我的代码:
user = "some text"
key = "some numbers"
ex("2017/10")
有什么建议吗?
更新
根据@v Sugumar 编写代码后。从 shell
>>> import expens as e
>>> user = "XXX"
>>> key = "111"
>>> e.exp("08/2017")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\ad\Anaconda4\lib\expens.py", line 29, in exp
userid = user
NameError: name 'user' is not defined
>>>
有两种方法可以做到:
- 删除函数参数,它们将自动从全局范围中选取。阅读:Short Description of the Scoping Rules?
user = "some text"
key = "some numbers"
def ex(filter):
login = user
secret = key
- 给它们静态默认值或使用全局变量选择默认值。
user = "some text"
key = "some numbers"
def ex(filter, key="some numbers", user="some text"): # static defaults
def ex(filter, key=key, user=user): # defaults picked from global variables
- 根本不要修改该函数并使用应用了
user
和key
的部分函数。
from functools import partial
ex_with_user_and_key = partial(ex, key="some numbers", user="some text")
ex_with_user_and_key("2017/10")
只需创建函数 def ex(filter):在此之前定义用户和密钥并使用函数中的变量。如果在函数中未找到变量,则将在封闭范围内搜索它,然后在全局作用域,然后在内置函数中,如果您不想更改函数内的全局变量,那么在使用它们之前不需要在变量名之前使用 global
#file listdir.py
def ex(filter):
login = user
secret = key
f1 = filter
print(login)
print(secret)
user = "some text"
key = "some numbers"
ex("2017/10")
更新
#file listdir.py
def ex(filter,user,key):
login = user
secret = key
f1 = filter
print(login)
print(secret)
更新 2
确定然后定义变量
#file listdir.py
def ex(filter):
login = user
secret = key
f1 = filter
print(login)
print(secret)
定义函数为def ex(filter):
如果在本地范围内找不到全局变量,该函数将自动获取全局变量(感谢 Ashwini 指出您不需要使用 global
)。因此,您可以将函数定义为:
def ex(filter):
login = user
secret = key
f1 = filter
"..." #many other comands
然后在调用它的时候,只要传入filter
和user
,key
就会从全局作用域中获取。所以可以调用:
ex("2017/10")