Tôi tin rằng nếu hàm được biên dịch từ một chuỗi, luồng hoặc được nhập từ tệp đã biên dịch, thì bạn không thể truy xuất mã nguồn của nó
Tuy nhiên, có thể truy xuất mã nguồn của một hàm được biên dịch từ một chuỗi, với điều kiện là mã biên dịch cũng đã thêm một mục vào lệnh linecache.cache
import linecache
import inspect
script = '''
def add_nums[a, b]:
return a + b
'''
bytecode = compile[script, 'unique_filename', 'exec']
tmp = {}
eval[bytecode, {}, tmp]
add_nums = tmp["add_nums"]
linecache.cache['unique_filename'] = [
len[script],
None,
script.splitlines[True],
'unique_filename',
]
print[inspect.getsource[add_nums]]
# prints:
# """
# def add_nums[a, b]:
# return a + b
# """
Đây là cách thư viện attrs
tự động tạo các phương thức khác nhau cho các lớp, được cung cấp một tập hợp các thuộc tính mà lớp dự kiến sẽ được khởi tạo với. Xem mã nguồn của họ tại đây. Như nguồn giải thích, đây là một tính năng chủ yếu nhằm cho phép các trình gỡ lỗi như PDB duyệt qua mã
Trong Python, hàm là một nhóm các câu lệnh [khối mã] liên quan đến nhau, Mục đích là thực hiện một công việc nào đó
Chức năng giúp chia nhỏ chương trình thành các mô-đun nhỏ hơn. Chương trình càng lớn thì chức năng càng nhiều
Chức năng giúp sử dụng lại các đoạn mã. Trượt lại các đoạn mã trùng nhau
Cú pháp của hàm, cách tạo hàm
Cấu trúc chức năng
def function_name [ arg1, arg2, ...] : ..... # function body ......
- Từ khóa
def
đánh dấu bắt đầu tiêu đề hàm - Tên của một chức năng phải là duy nhất
- Dấu hai chấm
:
đánh dấu kết thúc tiêu đề chức năng - Phần thân mô tả công việc của chức năng
- Các chức năng có thể có từ khóa
def function_name [ arg1, arg2, ...] : ..... # function body ......
0 để trả về một kết quả sau khi chức năng xử lý
Ví dụ
def subtract[a, b]: return [a-b] def say_hello[]: print["Hello World"]
call function. to call a function ta write name and các tham số của nó
say_hello[] print["10 - 5 = %d" % subtract[10, 5]] # prints -2
Kết quả
Hello World 10 - 5 = 5
10 Lý do nên học Python trong năm 2022
5 kinh nghiệm khi viết arrow function
Phạm vi và vòng đời của biến trong hàm
Các biến trong hàm chỉ có giá trị bên trong hàm [biến cục bộ]. Sau khi chức năng kết thúc, chúng bị hủy đi
Tôi đang cố gắng lấy mã nguồn trong python bằng cách sử dụng kiểm tra nhưng đó là lỗi. Ai đó có thể vui lòng cho tôi biết cách lấy mã nguồn của câu lệnh trong Python2. 7
Nội dung chính Hiển thị
- Làm thế nào để bạn nhập mã nguồn của một hàm trong Python?
- Làm cách nào để tạo mã lớp trong Python?
- Bạn có thể đặt một câu lệnh trong chức năng python không?
- Làm cách nào để mở mã nguồn trong Python?
Nội dung chính Hiển thị Hiển thị
- Làm thế nào để bạn nhập mã nguồn của một hàm trong Python?
- Làm cách nào để tạo mã lớp trong Python?
- Bạn có thể đặt một câu lệnh trong chức năng python không?
- Làm cách nào để mở mã nguồn trong Python?
inspect.getsourcefile[print]
---------------------------------------------------------------------------
TypeError Traceback [most recent call last]
in []
----> 1 inspect.getsourcefile[print]
/usr/lib/python3.4/inspect.py in getsourcefile[object]
569 Return None if no way can be identified to get the source.
570 """
--> 571 filename = getfile[object]
572 all_bytecode_suffixes = importlib.machinery.DEBUG_BYTECODE_SUFFIXES[:]
573 all_bytecode_suffixes += importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES[:]
/usr/lib/python3.4/inspect.py in getfile[object]
534 return object.co_filename
535 raise TypeError['{!r} is not a module, class, method, '
--> 536 'function, traceback, frame, or code object'.format[object]]
537
538 ModuleInfo = namedtuple['ModuleInfo', 'name suffix mode module_type']
TypeError: is not a module, class, method, function, traceback, frame, or code object
In [86]: inspect.getsourcefile[builtin.print]
---------------------------------------------------------------------------
NameError Traceback [most recent call last]
in []
----> 1 inspect.getsourcefile[builtin.print]
NameError: name 'builtin' is not defined
Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong trình soạn thảo để xem các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều