Sau các bài viết khác ở đây, tôi có một chức năng in ra thông tin về một biến dựa trên tên của nó. Tôi muốn chuyển nó thành một mô-đun.Acessing một biến như một chuỗi trong một mô-đun
#python 2.7
import numpy as np
def oshape(name):
#output the name, type and shape/length of the input variable(s)
#for array or list
x=globals()[name]
if type(x) is np.array or type(x) is np.ndarray:
print('{:20} {:25} {}'.format(name, repr(type(x)), x.shape))
elif type(x) is list:
print('{:20} {:25} {}'.format(name, repr(type(x)), len(x)))
else:
print('{:20} {:25} X'.format(name, type(t)))
a=np.array([1,2,3])
b=[4,5,6]
oshape('a')
oshape('b')
Output:
a <type 'numpy.ndarray'> (3,)
b <type 'list'> 3
Tôi muốn đặt chức năng oshape này() vào một module để nó có thể được tái sử dụng. Tuy nhiên, việc đặt trong một mô-đun không cho phép truy cập vào các hình cầu từ mô-đun chính. Tôi đã thử những thứ như 'import __main__' và thậm chí lưu trữ các hàm globals() và chuyển nó vào submodule. Vấn đề là globals() là một hàm, trả về cụ thể các globals của module mà nó được gọi từ, không phải là một hàm khác cho mỗi module.
import numpy as np
import olib
a=np.array([1,2,3])
b=[4,5,6]
olib.oshape('a')
olib.oshape('b')
Cung cấp cho tôi:
KeyError: 'a'
Thông tin thêm: Mục đích là để giảm gõ dư thừa. Với một sửa đổi nhỏ (tôi lấy nó ra để làm cho nó đơn giản cho câu hỏi), oshape có thể báo cáo về một danh sách các biến, vì vậy tôi có thể sử dụng nó như:
oshape('a', 'b', 'other_variables_i_care_about')
Vì vậy, giải pháp đòi hỏi phải gõ tên biến trong hai lần không thực sự là những gì tôi đang tìm kiếm. Ngoài ra, chỉ cần chuyển vào biến không cho phép tên được in. Hãy suy nghĩ về việc sử dụng điều này trong một tệp nhật ký dài để hiển thị kết quả tính toán & kiểm tra kích thước biến.
tại sao không chỉ vượt qua trong các mảng? –
tại sao không vượt qua biến trực tiếp và sử dụng nó như là? – njzk2
Vì tôi muốn in tên của biến. Tôi đã làm những việc như in ('a', nhập (a), a.shape) nhưng điều đó thật tẻ nhạt. – SolverWorld