TL; DR: Không thể. Xem 'Kết luận' ở cuối.
Có một kịch bản sử dụng mà bạn có thể cần điều này. Tôi không ngụ ý có những cách tốt hơn hoặc đạt được chức năng tương tự.
Điều này sẽ hữu ích để 'kết xuất' một danh sách từ điển tùy ý trong trường hợp lỗi, trong các chế độ gỡ lỗi và các tình huống tương tự khác.
Điều cần thiết, là mặt trái của chức năng
random_function[argument_data]
4:get_indentifier_name_missing_function[]
sẽ lấy một tên định danh ['biến', 'từ điển', v.v.] làm đối số và trả về một chuỗi chứa tên định danh.
Hãy xem xét tình trạng hiện tại sau đây:
random_function[argument_data]
Một người đang truyền một tên định danh ['hàm', 'biến', 'từ điển', v.v.]
random_function[argument_data]
5 sang random_function[argument_data]
6 [một tên định danh khác], người ta thực sự chuyển một định danh [ví dụ: random_function[argument_data]
7] cho một định danh khác [ví dụ: random_function[argument_data]
8] :[]
Theo hiểu biết của tôi, chỉ có địa chỉ bộ nhớ được chuyển đến hàm:
[]
Do đó, người ta sẽ cần chuyển một chuỗi làm đối số cho
random_function[argument_data]
6 để chức năng đó có tên định danh của đối số:random_function['argument_data']
Bên trong Random_Function []
def random_function[first_argument]:
, người ta sẽ sử dụng chuỗi đã được cung cấp
[]
0 để:Phục vụ như một 'Tên định danh' [để hiển thị, nhật ký, chia chuỗi/concat, bất cứ điều gì]
Thức ăn chức năng
4 để có được tham chiếu đến định danh thực tế và do đó, tham chiếu đến dữ liệu thực:random_function[argument_data]
print["Currently working on", first_argument] some_internal_var = eval[first_argument] print["here comes the data: " + str[some_internal_var]]
Thật không may, điều này không hoạt động trong mọi trường hợp. Nó chỉ hoạt động nếu
random_function[argument_data]
6 có thể giải quyết chuỗi []
0 cho một định danh thực tế. I E. Nếu random_function[argument_data]
5 Tên định danh có sẵn trong không gian tên của ____ 16.Điều này không phải lúc nào cũng như vậy:
# main1.py
import some_module1
argument_data = 'my data'
some_module1.random_function['argument_data']
# some_module1.py
def random_function[first_argument]:
print["Currently working on", first_argument]
some_internal_var = eval[first_argument]
print["here comes the data: " + str[some_internal_var]]
######
Kết quả dự kiến sẽ là:
Currently working on: argument_data
here comes the data: my data
Bởi vì tên định danh
random_function[argument_data]
5 không có sẵn trong không gian tên của ____ 16, điều này sẽ mang lại thay thế: thay vào đó:Currently working on argument_data
Traceback [most recent call last]:
File "~/main1.py", line 6, in
some_module1.random_function['argument_data']
File "~/some_module1.py", line 4, in random_function
some_internal_var = eval[first_argument]
File "", line 1, in
NameError: name 'argument_data' is not defined
Bây giờ, hãy xem xét việc sử dụng hạ huyết áp của
[]
8 sẽ hoạt động như mô tả ở trên.Đây là mã Python 3.0 giả:.
random_function[argument_data]
0Kết quả dự kiến sẽ là:
random_function[argument_data]
1Bởi vì tên định danh
random_function[argument_data]
5 không có sẵn trong không gian tên của ____ 16, điều này sẽ mang lại thay thế: thay vào đó:Bây giờ, hãy xem xét việc sử dụng hạ huyết áp của
[]
8 sẽ hoạt động như mô tả ở trên.random_function[argument_data]
2Đây là mã Python 3.0 giả:.
Thật không may,
[]
8 sẽ không thấy tên định danh 'gốc' [________ 30, ________ 31, ________ 32]. Nó sẽ chỉ thấy tên định danh []
3.random_function[argument_data]
3Do đó, kết quả thực sự sẽ là:
- Vì vậy, mặt trái của hàm
4 sẽ không hữu ích trong trường hợp này.random_function[argument_data]
- Hiện tại, người ta sẽ cần phải làm điều này:
- Tóm lại là:
- Python chỉ chuyển địa chỉ bộ nhớ dưới dạng các đối số cho các chức năng.
- Các chuỗi đại diện cho tên của một định danh, chỉ có thể được tham chiếu lại cho định danh thực tế bởi hàm
4 nếu định danh tên có sẵn trong không gian tên hiện tại.random_function[argument_data]
- Một mặt trái giả định của hàm
4, sẽ không hữu ích trong các trường hợp tên định danh không được 'nhìn thấy' trực tiếp bởi mã gọi. Ví dụ. bên trong bất kỳ chức năng được gọi là.random_function[argument_data]
- Các chuỗi đại diện cho tên của một định danh, chỉ có thể được tham chiếu lại cho định danh thực tế bởi hàm
Hiện tại một người cần phải chuyển đến một chức năng: