相关疑难解决方法(0)

如何创建可变数量的变量?

如何在Python中完成变量变量?

这是一个精心设计的手动条目,例如:变量变量

我听说这是一个坏主意,但它是Python中的一个安全漏洞.真的吗?

python variable-variables

315
推荐指数
13
解决办法
12万
查看次数

如何通过while循环动态创建变量?

我想通过Python中的while循环动态创建变量.有没有人有这样做的创造性手段?

python variables

142
推荐指数
6
解决办法
27万
查看次数

将字符串转换为变量名称

我有任何字符串.像'水牛',

x='buffalo'
Run Code Online (Sandbox Code Playgroud)

我想将此字符串转换为某个变量名称,如

buffalo=4 
Run Code Online (Sandbox Code Playgroud)

不仅这个例子,我想将任何输入字符串转换为某个变量名.我该怎么做(在python中)?

python python-2.7

90
推荐指数
3
解决办法
22万
查看次数

在python中生成变量名称

有没有办法在循环中在python中生成变量名并为它们赋值?例如,如果我有

prices = [5, 12, 45]
Run Code Online (Sandbox Code Playgroud)

我想要

price1 = 5
price2 = 12
price3 = 45
Run Code Online (Sandbox Code Playgroud)

我可以在一个循环或某事做,而不是手动分配price1 = prices[0],price2 = prices[1]等等.

谢谢.

编辑

很多人建议我写一个要求这个的理由.首先,有些时候我认为这可能比使用列表更方便...我不记得确切的时间,但我想我已经想过在有很多级别的嵌套时使用它.例如,如果有一个列表列表,以上述方式定义变量可能有助于降低嵌套级别.其次,今天我在尝试学习使用Pytables时想到了这一点.我刚看到Pytables,我看到在定义表结构时,列名和类型按以下方式描述:

class TableFormat(tables.IsDescription):
    firstColumnName = StringCol(16)
    secondColumnName = StringCol(16)
    thirdColumnName = StringCol(16)
Run Code Online (Sandbox Code Playgroud)

如果我有100列,则明确键入每列的名称似乎很多工作.所以,我想知道是否有办法动态生成这些列名.

python

58
推荐指数
5
解决办法
8万
查看次数

Python:使用vars()将字符串赋给变量

我发现能够在运行时创建新变量并创建结果字典以便稍后处理(即写入文件)非常有用:

myDict = {}
for i in range (1,10):
    temp = "variable"+str(i) 
    vars()[temp] = myFunctionThatReturnsData() # variable1= data1, variable2 = data2,etc.
    myDict[temp] = vars(temp)
Run Code Online (Sandbox Code Playgroud)

它创建了我可以用myDict [result1]调用的字典条目[result1:data1].我一直在使用vars()而没有真正理解我在做什么.我把它vars()带回一个带有局部变量(?)的字典,和

vars()[x] = y

创建[x:y]的新词典条目?

我有一个脚本,我传入一个用{input1:data1,input2:data2}准备的字典,我使用这个方法迭代所有值,存储所有结果,并将其输出到一个文件.这段代码在一个类中的函数内部,并且正在工作.

我的困惑之处在于我已经阅读了各种关于如何不与locals()混淆的帖子,以及vars()与locals()或globals()的等效(?).

所以我的问题(至少)是双重的:

1.什么是vars(),特别是vars()[x] = y,

2.这本词典的范围是什么(在编写更大的程序时我需要记住的是什么

3.这是不错的编程实践.

提前致谢!

python string variables dictionary

24
推荐指数
4
解决办法
5万
查看次数

是否可以在Python中"动态"创建局部变量?

是否可以使用Python代码创建局部变量,只给出变量的名称(字符串),以便后续调用locals()中的"'xxx'"将返回True?

这是一个视觉:

>>> 'iWantAVariableWithThisName' in locals()
False
>>> junkVar = 'iWantAVariableWithThisName'
>>> (...some magical code...)
>>> 'iWantAVariableWithThisName' in locals()
True
Run Code Online (Sandbox Code Playgroud)

出于什么目的,我需要这个技巧完全是另一个话题......

谢谢您的帮助.

python memory variables local instantiation

8
推荐指数
2
解决办法
8164
查看次数

在python 3中的函数中创建动态命名的变量/在python 3中理解exec/eval/locals

首先,让我说我在创建动态命名变量时阅读了许多具有类似主题的线程,但它们主要与Python 2相关,或者它们假设您正在使用类.是的,我在Python 2和Python 3中阅读了exec函数的行为.

我也知道在99%的时间内创建动态命名的变量是一个坏主意,字典是获得的方式,但我只想知道它是否仍然可行以及exec和locals在python 3中的运行方式.

我想展示一些示例代码来说明我的问题(斐波那契计算斐波纳契数,ListOfLetters提供["A","B",......]):

def functionname():
    for index, buchstabe in enumerate(ListOfLetters.create_list("A", "K"), 1): 
        exec("{} = {}".format(buchstabe, fibonacci(index)) ) #A = 1, B = 1, C = 2, D = 3, E = 5,...
        print(index, buchstabe, eval(buchstabe)) #works nicely, e.g. prints "4 D 3"
    print(locals()) #pritns all locals: {'B': 1, 'A': 1, 'index': 11, 'C': 2, 'H': 21, 'K': 89, ...
    print(locals()['K']) #prints 89 as it should
    print(eval("K")) #prints 89 as it should
    print(K) …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

8
推荐指数
2
解决办法
3694
查看次数

修改locals()或frame.f_locals中的* existing *变量

我发现了与此问题相关的一些模糊的问题,但没有找到任何针对CPython的干净且特定的解决方案。我认为“有效”解决方案是特定于解释器的。

首先,我认为我了解:

  • locals() 给出了不可修改的字典。
  • 函数可以(并且确实确实)使用某种优化来访问其局部变量
  • frame.f_locals给出了locals()类似的字典,但不太容易通过hackhacking exec。或至少我没有能力做些骇人听闻的未证明的事情,例如locals()['var'] = value ; exec ""
  • exec 能够对局部变量做一些奇怪的事情,但它并不可靠-例如,我读到某处它在Python 3中不起作用。未经测试。

因此,我了解到,鉴于这些限制,向局部变量添加额外的变量永远是不安全的,因为这会破坏解释器的结构。

但是,应该可以更改已经存在的变量,不是吗?

我考虑过的事情

  • 在一种功能中f,可以访问f.func_code.co_nlocalsf.func_code.co_varnames
  • 在一个框架中,可以通过访问/检查/读取变量frame.f_locals。这是通过设置跟踪器的用例sys.settrace
  • 可以很容易地访问框架所在的功能-结合使用设置跟踪的用例,并使用它在给定触发器或任何给定局部变量的情况下“执行操作”。

变量应该在某个地方,最好是可写的...但是我找不到它。即使它是一个数组(用于有效的解释器访问),或者我需要一些额外的C特定接线,我也准备提交。

如何从跟踪函数或修饰的包装函数或类似的东西实现对变量的修改?

完整的解决方案当然会受到赞赏,但即使是某些指针也会对我有很大帮助,因为我在这里遇到了很多不可写的字典:-/


编辑:hackish的exec是做这样的事情还是

python cpython

5
推荐指数
2
解决办法
931
查看次数

让kwargs直接访问

我正在重构一段代码,我遇到了以下问题.我有一个巨大的参数列表,现在我想传递给它kwargs.代码是这样的:

def f(a, b, c, ...):
  print a
  ...

f(a, b, c, ...)
Run Code Online (Sandbox Code Playgroud)

我正在重构它:

data = dict(a='aaa', b='bbb', c='ccc', ...)
f(**data)
Run Code Online (Sandbox Code Playgroud)

这意味着我必须这样做:

def f(**kwargs):
  print kwargs['a']
  ...
Run Code Online (Sandbox Code Playgroud)

但这是一个皮塔饼.我想保留:

def f(**kwargs):
  # Do some magic here to make the kwargs directly accessible
  print a
  ...
Run Code Online (Sandbox Code Playgroud)

是否有任何直接的方法kwargs dict可以直接访问参数,也许通过使用一些帮助类/库?

python arguments kwargs

4
推荐指数
2
解决办法
288
查看次数

将用户输入设置为变量名称

我正在使用 python 并想知道是否可以向用户询问变量的名称,然后使用该名称创建一个变量。例如:

my_name = input("Enter a variable name") #for example the user could input orange
#code to set the value of my_name as a variable, say set it to the integer 5
print(orange) #should print 5 if the user entered orange
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用字典来完成,但我想知道这是否可以在不创建其他对象的情况下完成。我正在使用 python 3。谢谢。

python

2
推荐指数
1
解决办法
1万
查看次数

如何在Python中按名称设置变量?

编辑2:因为很多人都在反对这个用例可以揭示的糟糕设计.这些问题和答案的读者在使用之前应该三思而后行

我试图在Python中用它的名字设置一个变量(不是属性):

foo = 'bar'
thefunctionimlookingfor('foo', 'baz')
print foot #should print baz
Run Code Online (Sandbox Code Playgroud)

PS:通过名称(没有eval)访问变量的函数将是一个加号!

编辑:我知道字典存在,这种用法是不鼓励的,我选择将它用于一个非常特定的目的(根据环境配置文件修改),这将让我的代码更容易阅读.

python

1
推荐指数
1
解决办法
177
查看次数

Call a list variable from a for loop in Python

If I have pre-set list variables that are the same name except for they end in a different number, how can I create variables in a for loop that will call those lists?

My issue is that the variable I create in the for loop is staying as a string. I need it to recognize that it's simply a name of a variable.

Example:

list1 = [2, 4, 3, 7]
list2 = [4, 5, 6]
list3 = [9, 5, 7, …
Run Code Online (Sandbox Code Playgroud)

python variables loops for-loop

1
推荐指数
1
解决办法
1万
查看次数

不使用等号定义变量

我试着去理解一些东西

x = 10
print x
Run Code Online (Sandbox Code Playgroud)

结果将是 10

x is 10
print x
Run Code Online (Sandbox Code Playgroud)

结果将是错误 X 未定义。

x = 10
y = 10

if x == y:
  print True

if x is y:
  print True
Run Code Online (Sandbox Code Playgroud)

结果是:

True
True
Run Code Online (Sandbox Code Playgroud)

是否有另一种不使用等号来定义变量的方法?

python operators

1
推荐指数
1
解决办法
2425
查看次数