我花了几个小时在这里和其他地方阅读,以及尝试,但我并不真正理解我确信这是一个非常基本的概念:在不同的函数之间传递值(作为变量).
例如,我将一大堆值分配给一个函数中的列表,然后希望稍后在另一个函数中使用该列表:
list = []
def defineAList():
list = ['1','2','3']
print "For checking purposes: in defineAList, list is",list
return list
def useTheList(list):
print "For checking purposes: in useTheList, list is",list
def main():
defineAList()
useTheList(list)
main()
Run Code Online (Sandbox Code Playgroud)
根据我对函数参数的理解,我希望这样做如下:
然而,这显然是错误的理解.我的输出是:
For checking purposes: in defineAList, list is ['1', '2', '3']
For checking purposes: in useTheList, list is []
Run Code Online (Sandbox Code Playgroud)
所以,既然"回归"显然没有做我认为它做的事情,或者至少它没有像我认为的那样去做......它实际上做了什么?你可以告诉我,使用这个例子,我需要做什么来从defineAList()获取列表并在useTheList()中使用它?当我看到它们发生时,我倾向于更好地理解事物,但是我所看到的很多适当的参数传递的例子也使用了我不熟悉的代码,并且在弄清楚发生了什么的过程中,我我真的没有理解这个概念.我正在使用2.7.
ETA-在过去,提出类似的问题,有人建议我使用全局变量而不仅仅是本地变量.如果它在这里也是相关的 - 为了我正在上课的目的,我们不允许使用全局变量.
谢谢!
假设我有一个通用函数f.我想以编程方式创建一个与f相同的函数f2,但它具有自定义签名.
更多详情
给定列表l和字典d我希望能够:
即.假设我们有
l=["x", "y"]
d={"opt":None}
def f(*args, **kwargs):
#My code
Run Code Online (Sandbox Code Playgroud)
然后我想要一个带签名的函数:
def f2(x, y, opt=None):
#My code
Run Code Online (Sandbox Code Playgroud)
一个特定的用例
这只是我特定用例的简化版本.我只是以此为例.
我的实际用例(简化)如下.我们有一个通用的启动函数:
def generic_init(self,*args,**kwargs):
"""Function to initiate a generic object"""
for name, arg in zip(self.__init_args__,args):
setattr(self, name, arg)
for name, default in self.__init_kw_args__.items():
if name in kwargs:
setattr(self, name, kwargs[name])
else:
setattr(self, name, default)
Run Code Online (Sandbox Code Playgroud)
我们想在许多类中使用此函数.特别是,我们想要创建一个函数init,其行为类似于generic_init,但在创建时具有由某些类变量定义的签名:
class my_class:
__init_args__=["x", "y"]
__kw_init_args__={"my_opt": None}
__init__=create_initiation_function(my_class, generic_init)
setattr(myclass, "__init__", __init__)
Run Code Online (Sandbox Code Playgroud)
我们希望create_initiation_function创建一个新函数,其签名使用init_args和kw_init_args定义.可以写create_initiation_function吗?
请注意: …
locals是一个内置函数,返回本地值的字典.文件说:
警告
不应修改此词典的内容; 更改可能不会影响解释器使用的局部变量的值.
不幸的是,exec在Python 3.0中也有同样的问题.这有什么办法吗?
用例
考虑:
@depends("a", "b", "c", "d", "e", "f")
def test():
put_into_locals(test.dependencies)
Run Code Online (Sandbox Code Playgroud)
depends将其参数中提供的字符串存储在列表中test.dependences.这些字符串是字典中的键d.我希望能够编写,put_into_locals以便我们可以将值拉出d并将它们放入本地.这可能吗?
我有一个非常基本的问题.
假设我调用一个函数,例如,
def foo():
x = 'hello world'
Run Code Online (Sandbox Code Playgroud)
如何让函数以这样的方式返回x,我可以将它用作另一个函数的输入或者在程序体内使用变量?
当我使用return并在另一个函数中调用该变量时,我得到一个NameError.
如何用hasattr(或不用)检查函数或方法中的attr存在?当我尝试以任何方式检查它是否为假:
>>> def f():
at = True
>>> hasattr(f, 'at')
False
>>> hasattr(f(), 'at')
False
Run Code Online (Sandbox Code Playgroud)