繁体   English   中英

如何在函数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. 删除函数参数,它们将自动从全局范围中选取。 阅读: 作用域规则的简短说明?

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

然后在调用它时,只需传入filter ,就会从全局范围中提取userkey 因此可以致电:

ex("2017/10")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM