chỉnh sửa. Để làm rõ, tôi không khuyến nghị bạn nên sử dụng điều này, nó sẽ bị phá vỡ, đó là một sự hỗn độn, nó sẽ không giúp bạn bằng mọi cách, nhưng nó có thể thực hiện được cho mục đích giải trí/giáo . Nói rõ hơn, tôi không khuyên bạn nên sử dụng cái này TẠI TẤT CẢ, nó sẽ bị hỏng, nó rất lộn xộn, nó sẽ không giúp ích gì cho bạn cả, nhưng nó có thể thực hiện được cho mục đích giải trí/giáo dục
Bạn có thể hack xung quanh với mô-đun
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
5, tôi không khuyên bạn nên làm điều đó, nhưng bạn có thể làm điều đó. import inspect
def foo[a, f, b]:
frame = inspect.currentframe[]
frame = inspect.getouterframes[frame][1]
string = inspect.getframeinfo[frame[0]].code_context[0].strip[]
args = string[string.find['['] + 1:-1].split[',']
names = []
for i in args:
if i.find['='] != -1:
names.append[i.split['='][1].strip[]]
else:
names.append[i]
print names
def main[]:
e = 1
c = 2
foo[e, 1000, b = c]
main[]
đầu ra
['e', '1000', 'c']
Falko
16. 4K13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng
Đã trả ngày 1 tháng 5 năm 2010 lúc 12. 13 Ngày 1 tháng 5 năm 2010 lúc 12. 13
Ivo Wetzelivo Wetzel Ivo Wetzel
45,9K15 Huy hiệu vàng 97 Huy hiệu bạc110 Huy hiệu đồng15 huy hiệu vàng97 huy hiệu bạc110 bronze badges
11
Để thêm vào câu trả lời của Michael Mrozek, bạn có thể trích xuất các tham số chính xác như vậy với toàn bộ mã bằng cách
import re
import traceback
def func[var]:
stack = traceback.extract_stack[]
filename, lineno, function_name, code = stack[-2]
vars_name = re.compile[r'\[[.*?]\].*$'].search[code].groups[][0]
print vars_name
return
foobar = "foo"
func[foobar]
# PRINTS: foobar
Đã trả ngày 7 tháng 10 năm 2014 lúc 16. 10 7 tháng 10, 2014 lúc 16. 10
propjk007propjk007 propjk007
5958 Huy hiệu bạc18 Huy hiệu đồng8 huy hiệu bạc18 huy hiệu đồng
1
Có vẻ như IVO đã đánh bại tôi
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
5, nhưng đây là một sự phát triển khác. import inspect
def varName[var]:
lcls = inspect.stack[][2][0].f_locals
for name in lcls:
if id[var] == id[lcls[name]]:
return name
return None
def foo[x=None]:
lcl='not me'
return varName[x]
def bar[]:
lcl = 'hi'
return foo[lcl]
bar[]
# 'lcl'
Tất nhiên, nó có thể bị lừa đảo
func[foobar]
0đạo đức. Don't doing that
Đã trả ngày 1 tháng 5 năm 2010 lúc 12. 22 Ngày 1 tháng 5 năm 2010 lúc 12. 22
ngoài ngoài
73. 4K20 Huy hiệu vàng147 Huy hiệu bạc216 Huy hiệu đồng20 huy hiệu vàng147 huy hiệu bạc216 huy hiệu đồng
1
you can't. Nó đã được đánh giá trước khi được chuyển đến chức năng. Tất cả những gì bạn có thể làm là vượt qua nó như một chuỗi
Đã trả ngày 1 tháng 5 năm 2010 lúc 12. 01 Ngày 1 tháng 5 năm 2010 lúc 12. 01
Max Shawabkehmax Shawabkeh Max Shawabkeh
36,8K9 Huy hiệu vàng81 Huy hiệu bạc91 Huy hiệu Đồng9 huy hiệu vàng81 huy hiệu bạc91 bronze badges
4
Một cách khác, bạn có thể thử xem liệu bạn có biết mã cuộc gọi sẽ như thế nào đang được sử dụng hay không
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
7. func[foobar]
2def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
8 sẽ chứa dòng mã được sử dụng để gọidef log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
9 [trong ví dụ của bạn, nó sẽ là chuỗiimport inspect
def foo[a, f, b]:
frame = inspect.currentframe[]
frame = inspect.getouterframes[frame][1]
string = inspect.getframeinfo[frame[0]].code_context[0].strip[]
args = string[string.find['['] + 1:-1].split[',']
names = []
for i in args:
if i.find['='] != -1:
names.append[i.split['='][1].strip[]]
else:
names.append[i]
print names
def main[]:
e = 1
c = 2
foo[e, 1000, b = c]
main[]
0]. Bạn có thể phân tích cú pháp đó để rút các đối sốĐã trả lời ngày 28 tháng 4 năm 2012 lúc 7. 09 28 tháng 4, 2012 lúc 7. 09
Michael Mrozekmichael Mrozek Michael Mrozek
164K28 Huy hiệu vàng167 Huy hiệu bạc172 Huy hiệu đồng28 huy hiệu vàng167 huy hiệu bạc172 huy hiệu đồng
Câu trả lời của @ivo Wetzel hoạt động trong trường hợp chức năng gọi chức năng được thực hiện trong một dòng, như
func[foobar]
6Trong trường hợp cuộc gọi hàm mà không nằm trong một dòng, như
func[foobar]
0Active code under here
func[foobar]
1Bạn sẽ nhận được
func[foobar]
2Nhưng vẫn như vậy, điều này có thể phá vỡ
Đã trả lời ngày 18 tháng 7 năm 2016 lúc 10. 20 18/07/2016 lúc 10. 20
Aeonaeon Aeon
891 Huy hiệu bạc4 Huy hiệu đồng1 huy hiệu bạc4 huy hiệu đồng
Đối với hậu thế, đây là một số mã tôi đã viết cho nhiệm vụ này, nói chung tôi nghĩ rằng có một mô-đun bị thiếu trong Python để cung cấp cho mọi người kiểm tra tốt và mạnh mẽ về môi trường người gọi. Tương tự như những gì RLAng Eval Framework cung cấp cho R
func[foobar]
3Osamoele
3234 Huy hiệu bạc15 Huy hiệu Đồng4 huy hiệu bạc15 huy hiệu đồng
Đã trả lời ngày 27 tháng 9 năm 2019 lúc 9. 37 27 tháng 9 năm 2019 lúc 9. 37
Matt Oatesmatt Oates Matt Oates
7785 Huy hiệu bạc6 Huy hiệu Đồng5 huy hiệu bạc6 huy hiệu đồng
2
Nếu bạn muốn một mối quan hệ cặp giá trị chính, có thể sử dụng từ điển sẽ tốt hơn?
Hoặc nếu bạn đang cố gắng tạo một số tài liệu tự động từ mã của bạn, thì có lẽ một cái gì đó như doxygen [http. //www. khí oxy. nl/] can't work for you?
Albert
7. 6333 Huy hiệu vàng18 Huy hiệu bạc31 Huy hiệu đồng3 huy hiệu vàng18 huy hiệu bạc31 huy hiệu đồng
Đã trả ngày 1 tháng 5 năm 2010 lúc 12. 06 Ngày 1 tháng 5 năm 2010 lúc 12. 06
Nick Cartwrightnick Cartwright Nick Cartwright
8. 25415 Huy hiệu vàng44 Huy hiệu bạc56 Huy hiệu Đồng15 huy hiệu vàng44 huy hiệu bạc56 huy hiệu đồng
Bạn có thể sử dụng gói Python-Varname
func[foobar]
4đầu ra
func[foobar]
5Dưới đây gói
https. //github. com/pwwang/python-varname
Đã trả ngày 17 tháng 1 năm 2021 lúc 9. 20 17 tháng 1 năm 2021 lúc 9. 20
SynthaseSynthase Synthase
5. 3912 Huy hiệu vàng10 Huy hiệu bạc31 Huy hiệu đồng2 huy hiệu vàng10 huy hiệu bạc31 huy hiệu đồng
2
Tôi tự hỏi làm thế nào kem giải quyết vấn đề này. Vì vậy, tôi đã xem xét mã nguồn và đưa ra giải pháp sau [hơi đơn giản]. Nó không thể là 100% chống đạn [ví dụ. tôi đã bỏ qua
import inspect
def foo[a, f, b]:
frame = inspect.currentframe[]
frame = inspect.getouterframes[frame][1]
string = inspect.getframeinfo[frame[0]].code_context[0].strip[]
args = string[string.find['['] + 1:-1].split[',']
names = []
for i in args:
if i.find['='] != -1:
names.append[i.split['='][1].strip[]]
else:
names.append[i]
print names
def main[]:
e = 1
c = 2
foo[e, 1000, b = c]
main[]
1 và tôi cho rằng chính xác một đối số chức năng], nhưng nó hoạt động tốt cho các trường hợp thử nghiệm khác nhau. Nó không cần phải phân tích mã nguồn, vì vậy nó sẽ mạnh mẽ và đơn giản hơn các giải pháp trước đây. func[foobar]
6đầu ra
func[foobar]
7Update. Nếu bạn muốn chuyển "ma thuật" vào một chức năng đặc biệt, bạn chỉ cần quay lại một khung hình trở lại với một
import inspect
def foo[a, f, b]:
frame = inspect.currentframe[]
frame = inspect.getouterframes[frame][1]
string = inspect.getframeinfo[frame[0]].code_context[0].strip[]
args = string[string.find['['] + 1:-1].split[',']
names = []
for i in args:
if i.find['='] != -1:
names.append[i.split['='][1].strip[]]
else:
names.append[i]
print names
def main[]:
e = 1
c = 2
foo[e, 1000, b = c]
main[]
2 sung. func[foobar]
8Đã trả ngày 15 tháng 5 năm 2021 lúc 10. 34 15 tháng 5 năm 2021 lúc 10. 34
Falkofalko Falko
16. 4K13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng
1
Đã trả tiền ngày 1 tháng 5 năm 2010 lúc 12. 13
func[foobar]
9Ivo Wetzelivo Wetzel
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
045,9K15 Huy hiệu vàng97 Huy hiệu bạc110 Huy hiệu đồng
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
1Để thêm vào câu trả lời của Michael Mrozek, bạn có thể trích xuất các tham số chính xác so với toàn bộ mã bằng cách. 21/02/2020 lúc 18. 31
1
Đã trả lời ngày 7 tháng 10 năm 2014 lúc 16. 10
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
2Đã trả lời ngày 19 tháng 3 năm 2019 lúc 0. 51 19/03/2019 lúc 0. 51
Camioncamion Camion
1. 1447 Huy hiệu bạc21 Huy hiệu đồng7 huy hiệu bạc21 huy hiệu đồng
Nếu nó xảy ra như vậy là một biến có thể được gọi là [hàm], thì nó sẽ có thuộc tính
import inspect
def foo[a, f, b]:
frame = inspect.currentframe[]
frame = inspect.getouterframes[frame][1]
string = inspect.getframeinfo[frame[0]].code_context[0].strip[]
args = string[string.find['['] + 1:-1].split[',']
names = []
for i in args:
if i.find['='] != -1:
names.append[i.split['='][1].strip[]]
else:
names.append[i]
print names
def main[]:
e = 1
c = 2
foo[e, 1000, b = c]
main[]
3Ví dụ. một trình bao bọc để ghi lại thời gian thực hiện của một hàm
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
3Đã trả ngày 13 tháng 1 lúc 4. 45 13 tháng 1 lúc 4. 45
David Gilbertsondavid Gilbertson David Gilbertson
3. 7901 Huy hiệu vàng21 Huy hiệu bạc 30 Huy hiệu Đồng1 huy hiệu vàng21 huy hiệu bạc30 huy hiệu đồng
1
Làm thế nào để bạn tìm thấy biến của một hàm trong Python?
Sử dụng cú pháp thuộc tính đối tượng để truy cập một biến bên ngoài hàm. Trong một chức năng có tên Func, sử dụng cú pháp Func. Biến = value to save the value in the variable as a property of func. Để truy cập giá trị bên ngoài func, hãy sử dụng func[] để chạy func, sau đó sử dụng chức năng cú pháp_name. để truy cập một biến bên ngoài hàm. Trong một hàm có tên func, hãy sử dụng cú pháp func. biến = giá trị để lưu trữ giá trị trong biến như một thuộc tính của func. Để truy cập giá trị bên ngoài func , hãy sử dụng func[] để chạy func , sau đó sử dụng cú pháp function_name.
Tôi có thể lấy tên biến trong Python không?
To have been name of a variable doing string. use function Globals dictionary [] to have a dictionary from does not time-module current name. repeat to dictionary to has been ample variable name. Truy cập list list tại INDEX 0 để lấy tên của biến