Hướng dẫn what happens if you define two functions in a module that have the same name in python? - điều gì sẽ xảy ra nếu bạn định nghĩa hai hàm trong một mô-đun có cùng tên trong python?

Tôi chỉ chơi xung quanh với Python và nhận ra điều gì đó kỳ lạ.

Tôi có chức năng dưới đây:

def myfun():    #f1
    return 1
def myfun():    #f2
    return 0

print (myfun())

Tôi đã thay đổi các giá trị trong f1

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
0, nhưng dường như nó luôn luôn in giá trị trả về của ____10. Có một lý do cụ thể?

Hướng dẫn what happens if you define two functions in a module that have the same name in python? - điều gì sẽ xảy ra nếu bạn định nghĩa hai hàm trong một mô-đun có cùng tên trong python?

Đã hỏi ngày 25 tháng 2 năm 2015 lúc 9:56Feb 25, 2015 at 9:56

Hướng dẫn what happens if you define two functions in a module that have the same name in python? - điều gì sẽ xảy ra nếu bạn định nghĩa hai hàm trong một mô-đun có cùng tên trong python?

4

Trong các ngôn ngữ được biên dịch, bạn thường sẽ nhận được một thông báo lỗi nếu bạn cố gắng xác định hai hàm có cùng tên. Nhưng trong các hàm Python là các đối tượng hạng nhất và chúng được xác định một cách linh hoạt.

Khi bạn xác định một hàm mới có cùng tên với hàm được xác định trước đó, tên hàm hiện được liên kết với đối tượng hàm mới và đối tượng hàm cũ được thu thập lại bởi Trình thu gom rác.

Vì vậy, những gì xảy ra với các chức năng của bạn không khác với những gì xảy ra với các ví dụ số nguyên đơn giản được đăng trong các câu trả lời khác trên trang này.

Tương tự, chúng ta có thể làm điều tương tự với các chức năng được xác định bằng cơ chế

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
2. Ví dụ:

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0

Đã trả lời ngày 25 tháng 2 năm 2015 lúc 10:11Feb 25, 2015 at 10:11

Hướng dẫn what happens if you define two functions in a module that have the same name in python? - điều gì sẽ xảy ra nếu bạn định nghĩa hai hàm trong một mô-đun có cùng tên trong python?

PM 2ringPM 2ringPM 2Ring

53.2K5 Huy hiệu vàng79 Huy hiệu bạc171 Huy hiệu đồng5 gold badges79 silver badges171 bronze badges

3

Tại sao điều đó lại kỳ lạ? Decleration hàm thứ hai ghi đè lên thứ nhất, vì vậy vào thời điểm

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
3 chỉ được gọi là
>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
0 tồn tại.

Đã trả lời ngày 25 tháng 2 năm 2015 lúc 9:59Feb 25, 2015 at 9:59

WeaselfoxweaselfoxWeaselFox

7.1307 Huy hiệu vàng43 Huy hiệu bạc74 Huy hiệu đồng7 gold badges43 silver badges74 bronze badges

4

Định nghĩa thứ hai khiến tên

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
5 bị ràng buộc với chức năng của nó thay thế liên kết được tạo ra bởi định nghĩa trước đó. Điều này hoàn toàn giống như những gì xảy ra trong:

a = 1
a = 0

print a

Đã trả lời ngày 25 tháng 2 năm 2015 lúc 10:02Feb 25, 2015 at 10:02

Dan D.Dan D.Dan D.

71.7K14 Huy hiệu vàng98 Huy hiệu bạc119 Huy hiệu đồng14 gold badges98 silver badges119 bronze badges

2

Hãy để tôi tạo một mô -đun với hai chức năng và thêm nhân tôi gọi mô -đun này là

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
6
I call this module as
>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
6

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
7 bao gồm mã sau:

     # prog1.py
def add(x,y,z):
    return (x+y+z)
def multiply(x,y):
    return (x * y) 

Hãy để tôi tạo một mô -đun khác với hai hàm và tên các hàm là: Thêm và chia.

Tôi gọi mô -đun này là

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
8

   # prog2.py
def add(x,y):
    return (x+y)
def divide(x,y):
    return (x / y)

Trong một chương trình khác

>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
9, tôi nhập hai mô -đun này như sau:

 #prog3.py 
import prog1
import prog2
a = prog1.add(10,20,30)
print("addition  from prog1",a)
b = prog2.add(10,20)
print("addition from prog2", b)

Loại tuyên bố nhập khẩu này sẽ loại bỏ sự mơ hồ. Nó hoạt động tốt. Cả hai cuộc gọi chức năng sẽ được thực thi và chúng tôi nhận được kết quả.

#prog4.py
from prog1 import add
from prog2 import add

a = add(10,20,30)
print("addition  from prog1",a)

b = add(10,20)
print("addition from prog2", b)

Ở đây, thông dịch viên sẽ xem xét cái mới nhất, từ

a = 1
a = 0

print a
0
from
a = 1
a = 0

print a
0

Chương trình trên sẽ đưa ra lỗi sau:

Traceback (most recent call last):
  File "prog4.py", line 4, in 
    a = add(10,20,30)
TypeError: add() takes 2 positional arguments but 3 were given
#prog5.py
from prog2 import add
from prog1 import add
b = add(10,20)
print("addition from prog2", b)
a = add(10,20,30)
print("addition  from prog1",a)
Traceback (most recent call last):
  File "prog5.py", line 7, in 
    b = add(10,20)
TypeError: add() missing 1 required positional argument: 'z'

Ở đây chương trình trên đang xem xét nhập khẩu mới nhất từ ​​

a = 1
a = 0

print a
1

Chúng ta phải cẩn thận nếu hai mô -đun có cùng chức năng với các tham số khác nhau trong khi nhập.

Điều gì xảy ra nếu bạn xác định hai hàm trong một mô -đun có cùng tên?

Khi bạn xác định một hàm mới có cùng tên với hàm được xác định trước đó, tên hàm hiện được liên kết với đối tượng hàm mới và đối tượng hàm cũ được thu thập lại bởi Trình thu gom rác.the function name is now bound to the new function object, and the old function object is reclaimed by the garbage collector.

Hai mô -đun có thể có chức năng cùng tên không?

Nó hoạt động tốt.Cả hai cuộc gọi chức năng sẽ được thực thi và chúng tôi nhận được kết quả.Chúng ta phải cẩn thận nếu hai mô -đun có cùng chức năng với các tham số khác nhau trong khi nhập.. Both the function calls would be executed and we get the results. We have to be careful if two modules has same function with different parameters while importing.

Hai chức năng có thể có cùng tên không?

Có, nó được gọi là quá tải chức năng.Nhiều chức năng có thể có cùng tên nếu bạn thích, tuy nhiên phải có các tham số khác nhau.. Multiple functions are able to have the same name if you like, however MUST have different parameters.

Có thể khai báo nhiều hơn một chức năng có cùng tên không?

Bạn được phép xác định hai hàm cùng tên nếu chúng có các loại khác nhau hoặc nếu chúng có thể được phân biệt bằng các nhãn đối số tham số bên ngoài của chúng.Loại hàm bao gồm các loại tham số trong ngoặc đơn, tiếp theo là ->, tiếp theo là loại trả về.if they have different Types, or if they can be distinguished by their external parameter argument labels. The Type of a function is composed of the parameter Types in parentheses, followed by -> , followed by the return Type.