Hướng dẫn dynamic typing and dynamic binding in python - nhập động và liên kết động trong python

Trong các biến Python không được khai báo - như được khai báo bằng nhiều ngôn ngữ như C, C ++, Java, v.v.variable type on the basis of value stored in it. 

Bây giờ vì không phải lúc nào chúng tôi gán một giá trị cho một biến trong khi viết mã, đôi khi giá trị được gán ở thời gian chạy. Ví dụ: chúng tôi thường xuyên lấy đầu vào từ người dùng và gán nó cho một biến. Trong trường hợp như vậy, các biến có thể được liên kết với loại (loại dữ liệu) nhất định trong khi viết mã. & NBSP;

Đó là vì lý do này trong Python được gọi là ngôn ngữ được đánh máy động bởi vì nó sử dụng liên kết động hoặc ràng buộc muộn - tức là tại thời điểm chạy. & NBSP;

Ví dụ

Hãy cho chúng tôi hiểu bằng cách sử dụng một số ví dụ mã hóa:

#Let us assign some integer value to a variable X 

X=10
print(type(X))

X="Hello"
print(type(X))

Cung cấp đầu ra:

 

Explanation:

Hãy để chúng tôi cố gắng hiểu mã ở trên:

  1. Dòng số. 3 gán giá trị 10 tại một số địa chỉ bộ nhớ và
  2. Liên kết biến thực sự chỉ là một nhãn cho địa chỉ bộ nhớ đó. Đó là lý do tại sao - loại x được hiển thị dưới dạng loại x là số nguyên.X is displayed as which means type of X is integer.
  3. Dòng số. 6 Ghi lại giá trị của Hello Hello vào cùng một biến X.
    • Trước hết, điều này chỉ có thể vì Python sử dụng ràng buộc động hoặc ràng buộc muộn. & NBSP;
    • Trong trường hợp liên kết tĩnh được sử dụng trong C, C ++, Java, v.v., bạn không thể gán lại một số loại dữ liệu khác cho một biến hiện có. Nó sẽ tạo ra một lỗi.
  4. Vì, Hello Hello là một chuỗi các nhân vật, Python lưu trữ Hello Hello đến một số vị trí bộ nhớ khác, nếu nó không tồn tại. Python sau đó liên kết X với một số vị trí hiện có khác hoặc vị trí bộ nhớ mới này giữ giá trị Hello Hello. Bây giờ loại x là chuỗi và do cùng một dòng 7 hiển thị đầu ra là

Hãy để chúng tôi cải thiện mã của chúng tôi để chứng minh thêm quan điểm của chúng tôi:

X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))

Hướng dẫn dynamic typing and dynamic binding in python - nhập động và liên kết động trong python

Biến Python -Binding

Trong mã trên, ID hàm () được sử dụng để tìm địa chỉ bộ nhớ là một biến (được truyền đến ID hàm () dưới dạng đối số) đang chỉ đến. Trong trường hợp của chúng tôi, biến x được truyền dưới dạng đối số. & Nbsp;

Kết luận - Python sử dụng liên kết động cho các biến

Vì giá trị được gán cho biến X được thay đổi từ 10 thành Hello Hello, nó hiển thị địa chỉ bộ nhớ khác nhau sau mỗi lần gán. Điều này chứng tỏ rằng Python sử dụng liên kết động cho các biến của nó, chỉ hoạt động như các nhãn chỉ vào một số địa chỉ bộ nhớ giữ một số giá trị mà chúng tôi gán cho một biến.

Hướng dẫn dynamic typing and dynamic binding in python - nhập động và liên kết động trong python

Dạy, mã hóa và chia sẻ là niềm đam mê của anh ấy. Một người cố vấn và động lực thực sự. C/ C ++, Python, Java, Web Technologies (HTML5/ CSS/ JavaScript/ JQuery, Bootstrap, NodeJS, PHP, v.v.) và một người đam mê WordPress với hơn hai thập kỷ kinh nghiệm.

Hướng dẫn dynamic typing and dynamic binding in python - nhập động và liên kết động trong python

Trong bài học này, bạn sẽ tìm hiểu về các hệ thống loại, so sánh việc gõ động và gõ tĩnh. Tất cả các ngôn ngữ lập trình bao gồm một số loại hệ thống loại chính thức hóa loại đối tượng mà nó có thể hoạt động và cách xử lý các loại đó.type systems, comparing dynamic typing and static typing. All programming languages include some kind of type system that formalizes which categories of objects it can work with and how those categories are treated.

Gõ động

Python là một ngôn ngữ được đánh máy động. Điều này có nghĩa là trình thông dịch Python chỉ kiểm tra loại khi mã chạy và loại biến được phép thay đổi trong suốt vòng đời của nó. Dưới đây là một vài ví dụ chứng minh những ý tưởng đó:dynamically typed language. This means that the Python interpreter does type checking only as code runs, and the type of a variable is allowed to change over its lifetime. Here are a couple of examples that demonstrate those ideas:

>>>

>>> if False:
...     1 + "two"  # This line never runs, so no TypeError is raised
... else:
...     1 + 2
...
3
>>> 1 + "two"  # Now this is type checked
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Trong ví dụ đầu tiên, chi nhánh 1 + "two" không bao giờ chạy, vì vậy nó không bao giờ được kiểm tra. Ví dụ thứ hai cho thấy rằng khi 1 + "two" được đánh giá, nó sẽ tăng

X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
0 vì bạn có thể thêm một số nguyên và một chuỗi trong Python.

Trong ví dụ tiếp theo này, bạn thấy các biến có thể thay đổi loại không:

>>>

>>> thing = "Hello"
>>> type(thing)
<class 'str'>

>>> thing = 28.1
>>> type(thing)
<class 'float'>

X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
1 Trả về loại đối tượng.

Gõ tĩnh

Đối diện của gõ động là gõ tĩnh. Kiểm tra loại tĩnh được thực hiện mà không cần chạy chương trình. Ví dụ, trong hầu hết các ngôn ngữ được gõ tĩnh C và Java, điều này được thực hiện khi chương trình của bạn được biên dịch. Loại biến không được phép thay đổi trong suốt vòng đời của nó.static typing. Static type checks are performed without running the program. In most statically typed languages, for instance C and Java, this is done as your program is compiled. The type of a variable is not allowed to change over its lifetime.

Trong ví dụ

X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
2 này trong Java, hãy xem phần giữa, trong đó
X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
3 được định nghĩa tĩnh là một loại
X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
4 và sau đó được gán giá trị
X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
5:

public class HelloTypes {

    public static void main(String[] args) {

        String thing;
        thing = "Hello World";

        System.out.println(thing);
    }
}

Đây không phải là một khóa học trên Java, vì vậy đừng lo lắng về các chi tiết cụ thể về cách tạo mã Java. Mục đích của ví dụ này là cho bạn thấy rằng có thêm các bước trong hầu hết các ngôn ngữ được đánh máy thống kê.

Trong ví dụ tiếp theo này, bạn sẽ sử dụng lệnh

X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
6 để biên dịch chương trình. Điều này tạo ra một tệp mới có cùng tên, nhưng một tiện ích mở rộng khác
X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
7 thay vì
X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
8. Đó là tệp có thể chạy bằng lệnh
X=10 
print(type(X)) 
#Let us display the memory address, X is pointing to
print(id(X))

X="Hello" 
print(type(X))
#Let us now display new memory address, X is pointing to
print(id(X))
9:

$ javac HelloTypes.java
$ java HelloTypes.class
Hello World

Nếu bạn cố gắng chỉ định lại

>>> if False:
...     1 + "two"  # This line never runs, so no TypeError is raised
... else:
...     1 + 2
...
3
>>> 1 + "two"  # Now this is type checked
TypeError: unsupported operand type(s) for +: 'int' and 'str'
0 thành một giá trị thuộc loại khác, ban đầu bạn sẽ không gặp lỗi. Chỉ khi mã được biên dịch, bạn mới thấy lỗi:

public class HelloTypes {

    public static void main(String[] args) {

        String thing;
        thing = "Hello World";

        thing = 42;

        System.out.println(thing);
    }
}

Dòng

>>> if False:
...     1 + "two"  # This line never runs, so no TypeError is raised
... else:
...     1 + 2
...
3
>>> 1 + "two"  # Now this is type checked
TypeError: unsupported operand type(s) for +: 'int' and 'str'
1 đang cố gắng thay đổi loại
>>> if False:
...     1 + "two"  # This line never runs, so no TypeError is raised
... else:
...     1 + 2
...
3
>>> 1 + "two"  # Now this is type checked
TypeError: unsupported operand type(s) for +: 'int' and 'str'
0 từ chuỗi thành int. Nếu bạn biên dịch mã này, bạn sẽ thấy lỗi:

$ javac Hellotypes.java
HelloTypes.java:8: error: incompatible types: int cannot be converted to String
    thing = 42;
1 error

Python sẽ luôn luôn là một ngôn ngữ được đánh máy động. Tuy nhiên, PEP 484 đã giới thiệu các gợi ý loại, điều này cũng có thể thực hiện kiểm tra loại tĩnh của mã python.

Dưới đây là một vài tài nguyên trên công cụ Bpython, vòng lặp (đọc vòng lặp inval Eval) được sử dụng trong các video này:

  • Một Python tốt hơn: Bpython vs Python
  • Trang chủ Bpython
  • Tài liệu Bpython

Gõ động là gì trong Python?

Gõ động có nghĩa là loại biến chỉ được xác định trong thời gian chạy. Do việc gõ mạnh, các loại cần phải tương thích với toán hạng khi thực hiện các hoạt động. Ví dụ: Python cho phép một người thêm số nguyên và số điểm nổi, nhưng việc thêm một số nguyên vào chuỗi tạo ra lỗi.the type of the variable is determined only during runtime. Due to strong typing, types need to be compatible with respect to the operand when performing operations. For example Python allows one to add an integer and a floating point number, but adding an integer to a string produces error.

Có sự ràng buộc năng động trong Python không?

SmallTalk, Objective-C, Modula-3, Python và Ruby sử dụng liên kết phương thức động cho tất cả các phương pháp..

Liên kết loại động là gì?

Liên kết loại động là gì?Liên kết động hoặc ràng buộc muộn là cơ chế mà một chương trình máy tính chờ đợi cho đến khi thời gian chạy để liên kết tên của một phương thức được gọi là chương trình con thực tế.Đây là một giải pháp thay thế cho liên kết sớm hoặc liên kết tĩnh trong đó quá trình này được thực hiện tại thời điểm biên dịch.26-APR-2017.the mechanism a computer program waits until runtime to bind the name of a method called to an actual subroutine. It is an alternative to early binding or static binding where this process is performed at compile-time.26-Apr-2017.

Là một phần gõ động của python?

Sự kết luận.Đỉnh cao hướng dẫn, chúng ta có thể nói rằng Python là một ngôn ngữ được đánh máy động và ở đây chúng ta hiểu những đặc điểm riêng biệt có thể được quan sát khi làm việc trên nó.python is a dynamically typed language and here we understood what are the distinct characteristics that can be observed while working on it.