Tôi là người mới đến Python, vì vậy tôi không biết nếu điều này là có thể. Tôi đang cố gắng tạo một danh sách các tên biến từ danh sách các chuỗi để sau đó tôi có thể gán các giá trị cho các biến mới được tạo.
Tôi đã thấy một câu hỏi tương tự khác, nhưng đã có một khoản phí các phím và giá trị.
Đây là mã của tôi:
def handy[self]:
a = raw_input['How many hands? ']
for i in range[int[a]]:
h = "hand" + str[i+ 1]
self.list_of_hands.append[h]
# would like to create variable names from self.list_of_hands
# something like "hand1 = self.do_something[i]"
print h
print self.list_of_hands
Đưa ra một số câu trả lời, tôi đang thêm nhận xét sau: Sau đó tôi sẽ gán các dicts cho từng biến. Vì vậy, tôi có thể tạo ra một từ điển từ điển?
Aran-Fey
36.6K11 Huy hiệu vàng96 Huy hiệu bạc141 Huy hiệu đồng11 gold badges96 silver badges141 bronze badges
Hỏi ngày 22 tháng 8 năm 2012 lúc 5:19Aug 22, 2012 at 5:19
DbweinsteindbweinsteinDBWeinstein
7.85530 Huy hiệu vàng68 Huy hiệu bạc110 Huy hiệu đồng30 gold badges68 silver badges110 bronze badges
3
Tại sao bạn không xây dựng một từ điển bằng cách sử dụng các chuỗi làm khóa?
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
Chỉnh sửa: Bạn đã cập nhật câu hỏi để hỏi liệu bạn có thể lưu trữ từ điển như một giá trị trong từ điển không. Vâng, bạn có thể: You updated the question to ask if you can store a dictionary as a value in a dictionary. Yes, you can:
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
Đã trả lời ngày 22 tháng 8 năm 2012 lúc 5:31Aug 22, 2012 at 5:31
Verdesmaraldverdesmaraldverdesmarald
11.4K2 Huy hiệu vàng41 Huy hiệu bạc59 Huy hiệu đồng2 gold badges41 silver badges59 bronze badges
Nếu bạn từng có nhiều biến chỉ khác nhau bởi một số ở cuối [
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
0, >>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
1, v.v.], bạn cần một container.Tôi nghĩ rằng một từ điển sẽ hoạt động tốt nhất:
self.hands = {}
self.hands[h] = self.do_something[i]
Bạn có thể truy cập các khóa riêng lẻ trong từ điển một cách dễ dàng:
self.hands['hand1']
Đã trả lời ngày 22 tháng 8 năm 2012 lúc 5:28Aug 22, 2012 at 5:28
2
h = "hand" + str[i+ 1]
vars[][h] = do_something[i]
Bây giờ bạn có thể gọi Hand1 để gọi DO_SOMETHER []
Đã trả lời ngày 22 tháng 8 năm 2012 lúc 6:23Aug 22, 2012 at 6:23
Thavanthavanthavan
2.35323 huy hiệu bạc32 huy hiệu đồng23 silver badges32 bronze badges
- Giới thiệu
- Nhiệm vụ
- Cách tiếp cận số 1 - Sử dụng Globals [] và người dân địa phương []
- Ví dụ với Globals []
- Ví dụ với người dân địa phương []
- Cách tiếp cận #2 - Sử dụng Vars []
- Thí dụ
- Cách tiếp cận 3 - Sử dụng từ điển
- Thí dụ
- Cách tiếp cận #3 - Sử dụng hàm EXEX []
- Thí dụ
- Cách tiếp cận 3 - Sử dụng từ điển
- Thí dụ
- Cách tiếp cận 3 - Sử dụng từ điển
Giới thiệu
Thí dụ
Chia sẻ một số cách tiếp cận dưới đây có thể được sử dụng để chuyển đổi tự động các giá trị chuỗi thành tên biến.
Nhiệm vụ
Chuỗi giá trị,
x = "pikachu"
đến một biến
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
2 để lưu trữ giá trị số nguyên [hoặc bất kỳ kiểu dữ liệu nào khác bạn muốn].pikachu = 10
Cách tiếp cận số 1 - Sử dụng Globals [] và người dân địa phương []
Chúng ta có thể sử dụng
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
3 và >>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
4 để chuyển đổi giá trị chuỗi thành một biến.Ví dụ với Globals []
x = "pikachu" globals[][x] = 10 print[pikachu]
Outputis, is,
10
Ví dụ với người dân địa phương []
Nếu chúng ta cần tạo biến trong phạm vi cục bộ, chúng ta sẽ sử dụng
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
4 thay vì >>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
3, phần còn lại sẽ giống nhau.Trong ví dụ dưới đây, chúng tôi sẽ tạo một biến bên trong một hàm. Vì bên trong hàm, nó sẽ là một biến có phạm vi cục bộ, chúng tôi sẽ sử dụng
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
4.>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
0Đầu ra là,
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
1Cách tiếp cận #2 - Sử dụng Vars []
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
8 cung cấp quyền truy cập cấp thấp vào các biến được tạo bởi Python. Khi được sử dụng mà không có bất kỳ đối số nào, nó hoạt động giống như >>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
4. Phạm vi của & nbsp; ________ 30 & nbsp; sẽ giống hệt như phạm vi của & nbsp; ________ 31.Thí dụ
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
2Đầu ra là,
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
3Cách tiếp cận #2 - Sử dụng Vars [] – Using a dictionary
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
8 cung cấp quyền truy cập cấp thấp vào các biến được tạo bởi Python. Khi được sử dụng mà không có bất kỳ đối số nào, nó hoạt động giống như >>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
4. Phạm vi của & nbsp; ________ 30 & nbsp; sẽ giống hệt như phạm vi của & nbsp; ________ 31.Thí dụ
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
4Đầu ra là,
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
3Cách tiếp cận #2 - Sử dụng Vars []
>>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
8 cung cấp quyền truy cập cấp thấp vào các biến được tạo bởi Python. Khi được sử dụng mà không có bất kỳ đối số nào, nó hoạt động giống như >>> d = { i : { j : str[i] + str[j] for j in range[5] } for i in range[5] }
>>> d[1][2]
'12'
>>> d[4][1]
'41'
>>> d[2]
{0: '20', 1: '21', 2: '22', 3: '23', 4: '24'}
>> d[5] = { 1 : '51' }
>> d[5][1]
'51'
4. Phạm vi của & nbsp; ________ 30 & nbsp; sẽ giống hệt như phạm vi của & nbsp; ________ 31.Thí dụ
Cách tiếp cận 3 - Sử dụng từ điểnCách được khuyến nghị nhất để làm điều này là sử dụng từ điển. Nó ít dễ bị lỗi và rủi ro bảo mật.method is not recommended as
self.hands = {}
self.hands[h] = self.do_something[i]
2 has some security risks. It is considered insecure because it allows the users to dynamically execute arbitrary Python code, which can be a big security loophole.Cách tiếp cận #3 - Sử dụng hàm EXEX []
Hàm EXEC có thể thực thi tự động mã của các chương trình Python. Mã có thể được truyền dưới dạng chuỗi hoặc mã đối tượng cho hàm này. Mã đối tượng được thực thi như là trong khi chuỗi được phân tích cú pháp đầu tiên và được kiểm tra bất kỳ lỗi cú pháp nào. Nếu không có lỗi cú pháp, chuỗi được thực thi dưới dạng mã Python.setattr[] method.
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
6Phương pháp này không được khuyến nghị vì
self.hands = {}
self.hands[h] = self.do_something[i]
2 có một số rủi ro bảo mật. Nó được coi là không an toàn vì nó cho phép người dùng thực hiện tự động mã Python tùy ý, có thể là một lỗ hổng bảo mật lớn.>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
7Cách tiếp cận #4 - Sử dụng phương thức SetAttr [] –
self.hands = {}
self.hands[h] = self.do_something[i]
4Cách tiếp cận này sử dụng phương thức Python SetAttr [].
Phương thức
self.hands = {}
self.hands[h] = self.do_something[i]
3 đặt giá trị của thuộc tính được chỉ định của đối tượng được chỉ định.setattr[] expects an object to be passed along with the value to generate/modify a new attribute.Cú pháp đi như thế này -
Thí dụ
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
8Đầu ra là,
>>> class test[]:
def handy[self]:
a = raw_input['How many hands? ']
d = { "hand" + str[i + 1] : self.do_something[i] for i in range[int[a]] }
keys = d.keys[]
keys.sort[]
for x in keys:
print x, '=', d[x]
def do_something[self, i]:
return "something " + str[i]
>>> test[].handy[]
How many hands? 4
hand1 = something 0
hand2 = something 1
hand3 = something 2
hand4 = something 3
9Cách tiếp cận #2 - Sử dụng Vars []