Kiểm tra.stack() python

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]
2
def 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ọi
def 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ỗi
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[]
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]
6

Trong trường hợp cuộc gọi hàm mà không nằm trong một dòng, như

func[foobar]
0

Active code under here

func[foobar]
1

Bạn sẽ nhận được

func[foobar]
2

Như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]
3

Osamoele

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]
5

Dướ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]
7

Update. 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]
9

Ivo Wetzelivo Wetzel

def log[soup]:
    f = open[varname+'.html', 'w']
    print >>f, soup.prettify[]
    f.close[]
0

45,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[]
3

Ví 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

Chủ Đề