Python 如何创建变量?
如何在Python中实现变量 下面是一个详细的手动输入,例如: 我听说这通常是一个坏主意,而且在PHP中是一个安全漏洞。这是真的吗?您可以使用来完成此操作。字典是键和值的存储Python 如何创建变量?,python,variable-variables,Python,Variable Variables,如何在Python中实现变量 下面是一个详细的手动输入,例如: 我听说这通常是一个坏主意,而且在PHP中是一个安全漏洞。这是真的吗?您可以使用来完成此操作。字典是键和值的存储 >>> dct = {'x': 1, 'y': 2, 'z': 3} >>> dct {'y': 2, 'x': 1, 'z': 3} >>> dct["y"] 2 您可以使用变量密钥名来实现变量的效果,而不存在安全风险 >>> x = "spam"
>>> dct = {'x': 1, 'y': 2, 'z': 3}
>>> dct
{'y': 2, 'x': 1, 'z': 3}
>>> dct["y"]
2
您可以使用变量密钥名来实现变量的效果,而不存在安全风险
>>> x = "spam"
>>> z = {x: "eggs"}
>>> z["spam"]
'eggs'
如果你想做这样的事情
var1 = 'foo'
var2 = 'bar'
var3 = 'baz'
...
列表可能比dict更合适。列表表示对象的有序序列,具有整数索引:
lst = ['foo', 'bar', 'baz']
print(lst[1]) # prints bar, because indices start at 0
lst.append('potatoes') # lst is now ['foo', 'bar', 'baz', 'potatoes']
对于有序序列,列表比带整数键的dict更方便,因为列表支持按索引顺序进行迭代、追加
,以及其他需要使用dict进行笨拙键管理的操作。您可以使用它来完成此操作。字典是键和值的存储
>>> dct = {'x': 1, 'y': 2, 'z': 3}
>>> dct
{'y': 2, 'x': 1, 'z': 3}
>>> dct["y"]
2
您可以使用变量密钥名来实现变量的效果,而不存在安全风险
>>> x = "spam"
>>> z = {x: "eggs"}
>>> z["spam"]
'eggs'
如果你想做这样的事情
var1 = 'foo'
var2 = 'bar'
var3 = 'baz'
...
列表可能比dict更合适。列表表示对象的有序序列,具有整数索引:
lst = ['foo', 'bar', 'baz']
print(lst[1]) # prints bar, because indices start at 0
lst.append('potatoes') # lst is now ['foo', 'bar', 'baz', 'potatoes']
对于有序序列,列表比带整数键的dict更方便,因为列表支持按索引顺序迭代、
追加
,以及需要使用dict进行笨拙的键管理的其他操作。每当您想要使用变量时,可能最好使用字典。因此,与其写作
$foo = "bar"
$$foo = "baz"
你写
mydict = {}
foo = "bar"
mydict[foo] = "baz"
这样,您就不会意外地覆盖以前存在的变量(这是安全方面),并且您可以拥有不同的“名称空间”。每当您想要使用变量时,最好使用字典。因此,与其写作
$foo = "bar"
$$foo = "baz"
你写
mydict = {}
foo = "bar"
mydict[foo] = "baz"
这样,您就不会意外地覆盖以前存在的变量(这是安全方面),并且您可以拥有不同的“名称空间”。使用内置函数按名称获取对象上的属性。根据需要修改名称
obj.spam = 'eggs'
name = 'spam'
getattr(obj, name) # returns 'eggs'
使用内置函数按名称获取对象上的属性。根据需要修改名称
obj.spam = 'eggs'
name = 'spam'
getattr(obj, name) # returns 'eggs'
这不是个好主意。如果要访问全局变量,可以使用 如果要访问本地范围内的变量,可以使用,但不能为返回的dict赋值
更好的解决方案是使用
getattr
或将变量存储在字典中,然后按名称访问它们。这不是一个好主意。如果要访问全局变量,可以使用
如果要访问本地范围内的变量,可以使用,但不能为返回的dict赋值
更好的解决方案是使用
getattr
或将变量存储在字典中,然后按名称访问它们。共识是使用字典进行访问-请参阅其他答案。在大多数情况下,这是一个好主意,但是,由此产生了许多方面:
- 您将自己负责这本词典,包括垃圾收集(在dict变量中)等
- 变量要么没有局部性,要么没有全局性,这取决于字典的全局性
- 如果要重命名变量名,必须手动重命名
- 然而,你要灵活得多,例如。
- 您可以决定覆盖现有变量或
- 。。。选择实现常量变量
- 针对不同类型引发覆盖异常的步骤
- 等等
from variableVariablesManager import VariableVariablesManager
myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])
# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
print("not allowed")
except AttributeError as e:
pass
# rename a variable
myVars.renameVariable('myconst', 'myconstOther')
# preserve locality
def testLocalVar():
myVars = VariableVariablesManager()
myVars['test'] = 13
print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])
# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
myVars = VariableVariablesManager()
print("inside function myVars['globalVar']:", myVars['globalVar'])
myVars['globalVar'] = 13
print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])
my_calculator.button_0 = tkinter.Button(root, text=0)
my_calculator.button_1 = tkinter.Button(root, text=1)
my_calculator.button_2 = tkinter.Button(root, text=2)
...
for i in range(10):
my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)
keyword_1 = 'apple'
keyword_2 = 'banana'
if query == keyword_1 or query == keyword_2:
print('Match.')
从variableVariablesManager导入variableVariablesManager
myVars=VariableVariablesManager()
myVars['test']=25
打印(myVars['test'])
#定义常量变量
myVars.defineConstVariable('myconst',13)
尝试:
myVars['myconst']=14#大家一致认为应该使用字典来解决这个问题-参见其他答案。在大多数情况下,这是一个好主意,但是,由此产生了许多方面:
- 您将自己负责这本词典,包括垃圾收集(在dict变量中)等
- 变量要么没有局部性,要么没有全局性,这取决于字典的全局性
- 如果要重命名变量名,必须手动重命名
- 然而,你要灵活得多,例如。
- 您可以决定覆盖现有变量或
- 。。。选择实现常量变量
- 针对不同类型引发覆盖异常的步骤
- 等等
也就是说,我已经实现了一个类,它提供了上面的一些想法。它适用于Python2和Python3
您可以这样使用:
from variableVariablesManager import VariableVariablesManager
myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])
# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
print("not allowed")
except AttributeError as e:
pass
# rename a variable
myVars.renameVariable('myconst', 'myconstOther')
# preserve locality
def testLocalVar():
myVars = VariableVariablesManager()
myVars['test'] = 13
print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])
# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
myVars = VariableVariablesManager()
print("inside function myVars['globalVar']:", myVars['globalVar'])
myVars['globalVar'] = 13
print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])
my_calculator.button_0 = tkinter.Button(root, text=0)
my_calculator.button_1 = tkinter.Button(root, text=1)
my_calculator.button_2 = tkinter.Button(root, text=2)
...
for i in range(10):
my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)
keyword_1 = 'apple'
keyword_2 = 'banana'
if query == keyword_1 or query == keyword_2:
print('Match.')
从variableVariablesManager导入variableVariablesManager
myVars=VariableVariablesManager()
myVars['test']=25
打印(myVars['test'])
#定义常量变量
myVars.defineConstVariable('myconst',13)
尝试:
myVars['myconst']=14 35;您必须使用以实现该行为:
def var_of_var(k, v):
globals()[k] = v
print variable_name # NameError: name 'variable_name' is not defined
some_name = 'variable_name'
globals()[some_name] = 123
print(variable_name) # 123
some_name = 'variable_name2'
var_of_var(some_name, 456)
print(variable_name2) # 456
您必须使用以下方法来实现该行为:
def var_of_var(k, v):
globals()[k] = v
print variable_name # NameError: name 'variable_name' is not defined
some_name = 'variable_name'
globals()[some_name] = 123
print(variable_name) # 123
some_name = 'variable_name2'
var_of_var(some_name, 456)
print(variable_name2) # 456
您还可以从“集合”模块中使用字典,而不是字典,这使得访问更容易
例如:
# using dictionary
variables = {}
variables["first"] = 34
variables["second"] = 45
print(variables["first"], variables["second"])
# using namedtuple
Variables = namedtuple('Variables', ['first', 'second'])
vars = Variables(34, 45)
print(vars.first, vars.second)
您还可以从“集合”模块中使用字典,而不是字典,这使得访问更容易
例如:
# using dictionary
variables = {}
variables["first"] = 34
variables["second"] = 45
print(variables["first"], variables["second"])
# using namedtuple
Variables = namedtuple('Variables', ['first', 'second'])
vars = Variables(34, 45)
print(vars.first, vars.second)
新程序员有时会编写如下代码:
from variableVariablesManager import VariableVariablesManager
myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])
# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
print("not allowed")
except AttributeError as e:
pass
# rename a variable
myVars.renameVariable('myconst', 'myconstOther')
# preserve locality
def testLocalVar():
myVars = VariableVariablesManager()
myVars['test'] = 13
print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])
# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
myVars = VariableVariablesManager()
print("inside function myVars['globalVar']:", myVars['globalVar'])
myVars['globalVar'] = 13
print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])
my_calculator.button_0 = tkinter.Button(root, text=0)
my_calculator.button_1 = tkinter.Button(root, text=1)
my_calculator.button_2 = tkinter.Button(root, text=2)
...
for i in range(10):
my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)
keyword_1 = 'apple'
keyword_2 = 'banana'
if query == keyword_1 or query == keyword_2:
print('Match.')
然后留给编码器一堆命名变量,编码工作量为O(m*n),其中m是命名变量的数量,n是需要访问(包括创建)变量组的次数。更精明的初学者注意到,每一行的唯一区别是根据规则改变的数字,并决定使用l
# Python 3.8.2 (default, Feb 26 2020, 02:56:10)
#<?php $a = 'hello'; ?>
#<?php $e = 'wow'; ?>
#<?php $$a = 'world'; ?>
#<?php echo "$a ${$a}\n"; ?>
#<?php echo "$a ${$a[1]}\n"; ?>
#<?php echo "$a $hello"; ?>
print('locals():\n')
a = 'hello'
e = 'wow'
locals()[a] = 'world'
print(a, locals()[a])
print(a, locals()[locals()['a'][1]])
print(a, hello)
print('\n\nglobals():\n')
a = 'hello'
e = 'wow'
globals()[a] = 'world'
print(a, globals()[a])
print(a, globals()[globals()['a'][1]])
print(a, hello)
locals():
hello world
hello wow
hello world
globals():
hello world
hello wow
hello world
# Python 2.7.16 (default, Jul 13 2019, 16:01:51)
# [GCC 8.3.0] on linux2
g = globals()
listB = []
for i in range(10):
g["num%s" % i] = i ** 10
listB.append("num{0}".format(i))
def printNum():
print "Printing num0 to num9:"
for i in range(10):
print "num%s = " % i,
print g["num%s" % i]
printNum()
listA = []
for i in range(10):
listA.append(i)
listA = tuple(listA)
print listA, '"Tuple to unpack"'
listB = str(str(listB).strip("[]").replace("'", "") + " = listA")
print listB
exec listB
printNum()
Printing num0 to num9:
num0 = 0
num1 = 1
num2 = 1024
num3 = 59049
num4 = 1048576
num5 = 9765625
num6 = 60466176
num7 = 282475249
num8 = 1073741824
num9 = 3486784401
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) "Tuple to unpack"
num0, num1, num2, num3, num4, num5, num6, num7, num8, num9 = listA
Printing num0 to num9:
num0 = 0
num1 = 1
num2 = 2
num3 = 3
num4 = 4
num5 = 5
num6 = 6
num7 = 7
num8 = 8
num9 = 9
a = 'b=5'
exec(a)
c = b*2
print (c)