如何给函数内的局部变量赋值 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
>>>

有两种方法可以做到:

  1. 删除函数参数,它们将自动从全局范围中选取。阅读:Short Description of the Scoping Rules?

user = "some text"
key = "some numbers"

def ex(filter):
    login = user
    secret = key
  1. 给它们静态默认值或使用全局变量选择默认值。

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
  1. 根本不要修改该函数并使用应用了 userkey 的部分函数。

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

然后在调用它的时候,只要传入filteruserkey就会从全局作用域中获取。所以可以调用:

ex("2017/10")