Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọc
Bàn luận
Một trong những phong cách mã hóa nổi bật nhất là theo mô hình OOP. Đối với điều này, ngày nay, căng thẳng đã được viết mã với mô đun, tăng gỡ lỗi và tạo ra một mã mạnh mẽ hơn, có thể sử dụng lại. Tất cả điều này đã khuyến khích việc sử dụng các chức năng khác nhau cho các nhiệm vụ khác nhau và do đó chúng tôi buộc phải biết một số hack của các chức năng. Bài viết này thảo luận về cách in tên của một hàm. Hãy để thảo luận về những cách nhất định trong đó điều này có thể được thực hiện. & NBSP;
Python3
Phương pháp 1: Nhận tên hàm trong Python bằng hàm.func_name & nbsp;
Bằng cách sử dụng chức năng thuộc tính chức năng đơn giản, func_name, người ta có thể lấy tên của hàm và do đó có thể khá tiện dụng cho mục đích kiểm tra và đôi khi cho tài liệu. Hạn chế là điều này hoạt động chỉ dành cho Python2. & NBSP;
foobar = "foo"
def func[var]:
print var.origname
7 foobar = "foo"
def func[var]:
print var.origname
8
9foobar = "foo"
def func[var]:
print var.origname
0 func[foobar]
1func[foobar]
The name of function is : GFG
func[foobar]
2func[foobar]
3func[foobar]
4 func[foobar]
5 func[foobar]
6__name__
func[foobar]
func[foobar]
func[foobar]
func[foobar]
func[foobar]
Đầu ra:
Python3
Phương pháp 1: Nhận tên hàm trong Python bằng hàm.func_name & nbsp;
Bằng cách sử dụng chức năng thuộc tính chức năng đơn giản, func_name, người ta có thể lấy tên của hàm và do đó có thể khá tiện dụng cho mục đích kiểm tra và đôi khi cho tài liệu. Hạn chế là điều này hoạt động chỉ dành cho Python2. & NBSP;
foobar = "foo"
def func[var]:
print var.origname
7 foobar = "foo"
def func[var]:
print var.origname
8
9foobar = "foo"
def func[var]:
print var.origname
0 func[foobar]
1func[foobar]
The name of function is : GFG
func[foobar]
2func[foobar]
3func[foobar]
4 func[foobar]
5 func[foobar]
6
func[foobar]
func[foobar]
func[foobar]
func[foobar]
func[foobar]
Đầu ra:
Phương pháp 2: Nhận tên hàm trong Python bằng hàm .__ Tên __ & nbsp;
Hàm này có thể được sử dụng thay thế cho hàm trên và đã được giới thiệu trong Python3 vì hàm được đề cập trong phương pháp trên đã được khấu hao trong Python3. & NBSP;
foobar = "foo"
def func[var]:
print var.origname
9def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
0func[foobar]
2func[foobar]
3func[foobar]
4 func[foobar]
5 def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
6Phương pháp 3: Nhận tên hàm trong Python bằng cách sử dụng thuộc tính __qualname__
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
0def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
0func[foobar]
2def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
3func[foobar]
2def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
5
9foobar = "foo"
def func[var]:
print var.origname
0 func[foobar]
1func[foobar]
Geekforgeeks Geekforgeeks.my_method
Có thể lấy tên biến ban đầu của một biến được truyền đến một hàm không? Ví dụ.
Nội dung chính
- Làm thế nào để bạn có được tên chức năng và đối số trong Python?
- Tên biến được sử dụng bởi một hàm để nhận giá trị được chuyển là gì?
- * Kwargs trong Python là gì?
- Làm thế nào để các đối số được thông qua trong Python bằng cách tham chiếu hoặc theo giá trị?
foobar = "foo"
def func[var]:
print var.origname
Tất cả các tham số [đối số] trong ngôn ngữ Python được truyền qua tham chiếu.Điều đó có nghĩa là nếu bạn thay đổi những gì một tham số đề cập đến trong một hàm, thay đổi cũng phản ánh lại trong hàm gọi.by reference. It means if you change what a parameter refers to within a function, the change also reflects back in the calling function.
func[foobar]
Returns:
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
4EDIT:
Có thể lấy tên biến ban đầu của một biến được truyền đến một hàm không? Ví dụ.
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
Nội dung chính
Để có thể:
Tất cả những gì tôi đang cố gắng làm là làm cho một chức năng như:May 1, 2010 at 11:57
.. và có chức năng tạo tên tệp từ tên của biến được truyền cho nó.Acorn
Tôi cho rằng nếu không thể tôi sẽ phải truyền biến và tên của biến như một chuỗi mỗi lần.26 gold badges129 silver badges171 bronze badges
3
Khi được hỏi ngày 1 tháng 5 năm 2010 lúc 11:57May 1, 2010 at 11:57 To make it clear, I don't recommend using this AT ALL, it will break, it's a mess, it won't help you in any way, but it's doable for entertainment/education purposes.
AcornacornAcorn
47.5K26 Huy hiệu vàng129 Huy hiệu bạc171 Huy hiệu đồng26 gold badges129 silver badges171 bronze badgesOutput:
['e', '1000', 'c']
Chỉnh sửa: Để làm rõ, tôi không khuyên bạn nên sử dụng điều này, nó sẽ bị phá vỡ, đó là một mớ 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 dục. To make it clear, I don't recommend using this AT ALL, it will break, it's a mess, it won't help you in any way, but it's doable for entertainment/education purposes.
16.4K13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng13 gold badges54 silver badges101 bronze badges13 gold badges54 silver badges101 bronze badges
Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:13May 1, 2010 at 12:13
Ivo Wetzelivo WetzelIvo Wetzel
45,9K15 Huy hiệu vàng97 Huy hiệu bạc110 Huy hiệu đồng15 gold badges97 silver badges110 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 so với toàn bộ mã bằng cách:
The name of function is : GFG0
Đã trả lời ngày 7 tháng 10 năm 2014 lúc 16:10Oct 7, 2014 at 16:10Oct 7, 2014 at 16:10
propjk007propjk007propjk007propjk007
5958 Huy hiệu bạc18 Huy hiệu đồng8 silver badges18 bronze badges8 silver badges18 bronze badges
1
Có vẻ như IVO đã đánh bại tôi đến
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
5, nhưng đây là một triển khai khác:The name of function is : GFG2
Tất nhiên, nó có thể bị lừa:
The name of function is : GFG3
Đạo đức: Đừng làm điều đó.
Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:22May 1, 2010 at 12:22May 1, 2010 at 12:22
Outisoutisoutisoutis
73.5K20 Huy hiệu vàng147 Huy hiệu bạc216 Huy hiệu Đồng20 gold badges147 silver badges216 bronze badges20 gold badges147 silver badges216 bronze badges
1
Bạn không thể. 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ả lời ngày 1 tháng 5 năm 2010 lúc 12:01May 1, 2010 at 12:01May 1, 2010 at 12:01
Max Shawabkehmax ShawabkehMax ShawabkehMax Shawabkeh
36,8K9 Huy hiệu vàng81 Huy hiệu bạc91 Huy hiệu Đồng9 gold badges81 silver badges91 bronze badges9 gold badges81 silver badges91 bronze badges
4
Một cách khác bạn có thể thử nếu bạn biết mã gọi sẽ như thế nào là sử dụng
def log[soup]:
f = open[varname+'.html', 'w']
print >>f, soup.prettify[]
f.close[]
7:The name of function is : GFG5
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 ra đối sốĐã trả lời ngày 28 tháng 4 năm 2012 lúc 7:09Apr 28, 2012 at 7:09Apr 28, 2012 at 7:09
Michael Mrozekmichael MrozekMichael MrozekMichael Mrozek
164K28 Huy hiệu vàng167 Huy hiệu bạc172 Huy hiệu đồng28 gold badges167 silver badges172 bronze badges28 gold badges167 silver badges172 bronze badges
Câu trả lời của @ivo Wetzel hoạt động trong trường hợp gọi chức năng được thực hiện trong một dòng, như
The name of function is : GFG9
Trong trường hợp cuộc gọi hàm đó không nằm trong một dòng, như:
func[foobar]
0Mã dưới đây hoạt động:
func[foobar]
1Bạn sẽ nhận được:
func[foobar]
2Nhưng vẫn 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:20Jul 18, 2016 at 10:20Jul 18, 2016 at 10:20
AeonaeonAeonAeon
891 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges1 silver badge4 bronze badges
Đố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 silver badges15 bronze badges4 silver badges15 bronze badges
Đã trả lời ngày 27 tháng 9 năm 2019 lúc 9:37Sep 27, 2019 at 9:37Sep 27, 2019 at 9:37
Matt Oatesmatt OatesMatt OatesMatt Oates
7785 Huy hiệu bạc6 Huy hiệu Đồng5 silver badges6 bronze badges5 silver badges6 bronze badges
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, có lẽ một cái gì đó như doxygen [//www.doxygen.nl/] có thể làm công việc cho bạn?
Albert
7.6333 Huy hiệu vàng18 Huy hiệu bạc31 Huy hiệu đồng3 gold badges18 silver badges31 bronze badges3 gold badges18 silver badges31 bronze badges
Đã trả lời ngày 1 tháng 5 năm 2010 lúc 12:06May 1, 2010 at 12:06May 1, 2010 at 12:06
Nick Cartwrightnick CartwrightNick CartwrightNick Cartwright
8.25415 Huy hiệu vàng44 Huy hiệu bạc56 Huy hiệu Đồng15 gold badges44 silver badges56 bronze badges15 gold badges44 silver badges56 bronze badges
Bạn có thể sử dụng gói Python-Varname
func[foobar]
4Output:
func[foobar]
5Gói dưới đây:
//github.com/pwwang/python-varname
Đã trả lời ngày 17 tháng 1 năm 2021 lúc 9:20Jan 17, 2021 at 9:20Jan 17, 2021 at 9:20
SynthaseSynthaseSynthaseSynthase
5.3912 Huy hiệu vàng10 Huy hiệu bạc31 Huy hiệu đồng2 gold badges10 silver badges31 bronze badges2 gold badges10 silver badges31 bronze badges
2
Tôi tự hỏi làm thế nào icecream 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ó có thể không phải là 100% chống đạn [ví dụ: tôi đã bỏ
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]
6Output:
func[foobar]
7Cập nhật: Nếu bạn muốn di chuyển "ma thuật" vào một chức năng riêng biệt, bạn chỉ cần phải 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 bổ sung.func[foobar]
8Đã trả lời ngày 15 tháng 5 năm 2021 lúc 10:34May 15, 2021 at 10:34May 15, 2021 at 10:34
FalkofalkoFalkoFalko
16.4K13 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng13 gold badges54 silver badges101 bronze badges13 gold badges54 silver badges101 bronze badges
1
Đã trả lời 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:Feb 21, 2020 at 18:31Feb 21, 2020 at 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:51Mar 19, 2019 at 0:51Mar 19, 2019 at 0:51
CamioncamionCamionCamion
1.1447 Huy hiệu bạc21 Huy hiệu đồng7 silver badges21 bronze badges7 silver badges21 bronze badges
Nếu nó xảy ra như vậy là biến có thể gọi được [hàm], 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ả lời ngày 13 tháng 1 lúc 4:45Jan 13 at 4:45Jan 13 at 4:45
David Gilbertsondavid GilbertsonDavid GilbertsonDavid Gilbertson
3.7901 Huy hiệu vàng21 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge21 silver badges30 bronze badges1 gold badge21 silver badges30 bronze badges
1
Làm thế nào để bạn có được tên chức năng và đối số trong Python?
Để trích xuất số và tên của các đối số từ một hàm hoặc hàm [một cái gì đó] để trả về ["arg1", "arg2"], chúng tôi sử dụng mô -đun kiểm tra. Mã đã cho được viết như sau bằng cách sử dụng mô -đun kiểm tra để tìm các tham số bên trong các hàm amethod và foo.use the inspect module. The given code is written as follows using inspect module to find the parameters inside the functions aMethod and foo.use the inspect module. The given code is written as follows using inspect module to find the parameters inside the functions aMethod and foo.
Tên biến được sử dụng bởi một hàm để nhận giá trị được chuyển là gì?
Dữ liệu được truyền cho hàm được gọi là các tham số "thực tế".Các biến trong hàm nhận dữ liệu được truyền được gọi là các tham số "chính thức".formal" parameters.formal" parameters.
* Kwargs trong Python là gì?
** KWARGS cho phép chúng tôi chuyển một số lượng các đối số từ khóa cho chức năng Python.Trong hàm, chúng tôi sử dụng Double-Sasterisk [**] trước tên tham số để biểu thị loại đối số này.allows us to pass a variable number of keyword arguments to a Python function. In the function, we use the double-asterisk [ ** ] before the parameter name to denote this type of argument.allows us to pass a variable number of keyword arguments to a Python function. In the function, we use the double-asterisk [ ** ] before the parameter name to denote this type of argument.
Làm thế nào để các đối số được thông qua trong Python bằng cách tham chiếu hoặc theo giá trị?
Tất cả các tham số [đối số] trong ngôn ngữ Python được truyền qua tham chiếu.Điều đó có nghĩa là nếu bạn thay đổi những gì một tham số đề cập đến trong một hàm, thay đổi cũng phản ánh lại trong hàm gọi.by reference. It means if you change what a parameter refers to within a function, the change also reflects back in the calling function.by reference. It means if you change what a parameter refers to within a function, the change also reflects back in the calling function.