Mã chức năng in python

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

Chủ Đề