4.3 Bắt đầu với ngôn ngữ Python

Tác giả:Tốt, Tạo: 2019-04-28 09:55:02, Cập nhật:

Chất lông trước

Vì vậy, bạn muốn học ngôn ngữ lập trình Python nhưng không thể tìm thấy một hướng dẫn ngắn gọn nhưng đầy đủ tính năng. Bài hướng dẫn này sẽ cố gắng dạy bạn Python trong 10 phút. Nó có lẽ không phải là một hướng dẫn mà là một sự chéo giữa một hướng dẫn và một trang cheatsheet, vì vậy nó sẽ chỉ cho bạn thấy một số khái niệm cơ bản để bắt đầu. Rõ ràng, nếu bạn thực sự muốn học một ngôn ngữ bạn cần lập trình trong đó trong một thời gian. Tôi sẽ giả định rằng bạn đã quen thuộc với lập trình và do đó sẽ bỏ qua hầu hết các thứ không cụ thể về ngôn ngữ. Các từ khóa quan trọng sẽ được làm nổi bật để bạn có thể dễ dàng phát hiện chúng. Ngoài ra, bởi vì, do sự ngắn gọn của bài hướng dẫn này, một số thứ sẽ được giới thiệu trực tiếp trong mã và chỉ được bình luận ngắn gọn.

Chúng tôi sẽ tập trung vào Python 3, vì đó là phiên bản bạn nên sử dụng. Tất cả các ví dụ trong cuốn sách đều ở Python 3, và nếu ai khuyên bạn nên sử dụng 2, họ không phải là bạn của bạn.

Tính chất

Python có kiểu mạnh mẽ (tức là các loại được thực thi), động, ẩn kiểu (tức là bạn không cần phải tuyên bố biến), nhạy với chữ cái (tức là var và VAR là hai biến khác nhau) và hướng đối tượng (tức là mọi thứ là một đối tượng).

Tìm kiếm sự giúp đỡ

Trợ giúp trong Python luôn có sẵn ngay trong trình diễn. Nếu bạn muốn biết một đối tượng hoạt động như thế nào, tất cả những gì bạn phải làm là gọi help (() !bác sĩ., cho bạn thấy chuỗi tài liệu của nó:

>>> help(5)
Help on int object:
(etc etc)

>>> dir(5)
['__abs__', '__add__', ...]

>>> abs.__doc__
'abs(number) -> number

Return the absolute value of the argument.

Định nghĩa

Python không có các ký tự kết thúc câu lệnh bắt buộc và các khối được chỉ định bằng cách nhấp. Nhấp để bắt đầu một khối, giảm để kết thúc một. Các câu lệnh mong đợi mức nhấp kết thúc bằng dấu chấm hai (:). Các bình luận bắt đầu bằng dấu pound (#) và là một dòng, chuỗi nhiều dòng được sử dụng cho các bình luận nhiều dòng. Các giá trị được gán (thực tế, các đối tượng bị ràng buộc với tên) với dấu bằng (=), và kiểm tra bình đẳng được thực hiện bằng cách sử dụng hai dấu bằng (==). Bạn có thể tăng / giảm giá trị bằng cách sử dụng các toán tử += và -= tương ứng bằng số lượng bên phải. Điều này hoạt động trên nhiều kiểu dữ liệu, bao gồm các chuỗi. Bạn cũng có thể sử dụng nhiều biến trên một dòng. Ví dụ:

>>> myvar = 3
>>> myvar += 2
>>> myvar
5
>>> myvar -= 1
>>> myvar
4
"""This is a multiline comment.
The following lines concatenate the two strings."""
>>> mystring = "Hello"
>>> mystring += " world."
>>> print(mystring)
Hello world.
# This swaps the variables in one line(!).
# It doesn't violate strong typing because values aren't
# actually being assigned, but new objects are bound to
# the old names.
>>> myvar, mystring = mystring, myvar

Loại dữ liệu

Các cấu trúc dữ liệu có sẵn trong python là danh sách, tuples và từ điển. Các tập hợp có sẵn trong thư viện tập hợp (nhưng được tích hợp trong Python 2.5 và mới hơn). Danh sách giống như mảng một chiều (nhưng bạn cũng có thể có danh sách các danh sách khác), từ điển là mảng liên kết (hay còn gọi là bảng băm) và tuples là mảng một chiều không thể thay đổi (Python arrays có thể thuộc bất kỳ loại nào, do đó bạn có thể trộn ví dụ như số nguyên, chuỗi, vv trong danh sách / từ điển / tuples). Chỉ số của mục đầu tiên trong tất cả các loại mảng là 0. Số âm tính đếm từ cuối đến đầu, -1 là mục cuối cùng. Các biến có thể chỉ đến các hàm. Việc sử dụng như sau:

>>> sample = [1, ["another", "list"], ("a", "tuple")]
>>> mylist = ["List item 1", 2, 3.14]
>>> mylist[0] = "List item 1 again" # We're changing the item.
>>> mylist[-1] = 3.21 # Here, we refer to the last item.
>>> mydict = {"Key 1": "Value 1", 2: 3, "pi": 3.14}
>>> mydict["pi"] = 3.15 # This is how you change dictionary values.
>>> mytuple = (1, 2, 3)
>>> myfunction = len
>>> print(myfunction(mylist))
3

Bạn có thể truy cập phạm vi mảng bằng dấu chấm hai dấu (:). Để lại chỉ mục bắt đầu trống giả định mục đầu tiên, để lại chỉ mục cuối giả định mục cuối cùng. Chỉ mục là bao gồm-độc quyền, vì vậy chỉ định [2:10] sẽ trả về các mục [2] (điểm thứ ba, vì chỉ mục 0) đến [9] (điểm thứ mười), bao gồm (8 mục).

>>> mylist = ["List item 1", 2, 3.14]
>>> print(mylist[:])
['List item 1', 2, 3.1400000000000001]
>>> print(mylist[0:2])
['List item 1', 2]
>>> print(mylist[-3:-1])
['List item 1', 2]
>>> print(mylist[1:])
[2, 3.14]
# Adding a third parameter, "step" will have Python step in
# N item increments, rather than 1.
# E.g., this will return the first item, then go to the third and
# return that (so, items 0 and 2 in 0-indexing).
>>> print(mylist[::2])
['List item 1', 3.14]

Các dây

Các chuỗi của nó có thể sử dụng dấu ngoặc kép đơn hoặc đôi, và bạn có thể có dấu ngoặc kép của một loại bên trong một chuỗi sử dụng loại khác (ví dụ: He said hello. là hợp lệ).báo giá gấp ba lần (hoặc đơn)(). Các chuỗi Python luôn là Unicode, nhưng có một loại chuỗi khác là byte thuần túy. Chúng được gọi là bystrings và được đại diện bằng tiền tố b, ví dụ bHello \xce\xb1. Để lấp đầy một chuỗi với các giá trị, bạn sử dụng toán tử % (modulo) và một tuple. Mỗi %s được thay thế bằng một mục từ tuple, từ trái sang phải, và bạn cũng có thể sử dụng thay thế từ điển, như thế này:

>>> print("Name: %s\
Number: %s\
String: %s" % (myclass.name, 3, 3 * "-"))
Name: Stavros
Number: 3
String: ---

strString = """This is
a multiline
string."""

# WARNING: Watch out for the trailing s in "%(key)s".
>>> print("This %(verb)s a %(noun)s." % {"noun": "test", "verb": "is"})
This is a test.

>>> name = "Stavros"
>>> "Hello, {}!".format(name)
Hello, Stavros!
>>> print(f"Hello, {name}!")
Hello, Stavros!

Tuyên bố kiểm soát dòng chảy

Các câu lệnh kiểm soát dòng chảy là if, for, và while. Không có switch; thay vào đó, sử dụng if. Sử dụng for để liệt kê thông qua các thành viên của một danh sách. Để có được một chuỗi số bạn có thể lặp lại, sử dụng range() .

rangelist = list(range(10))
>>> print(rangelist)
range(0, 10)
>>> print(list(rangelist))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for number in rangelist:
    # Check if number is one of
    # the numbers in the tuple.
    if number in (3, 4, 7, 9):
        # "Break" terminates a for without
        # executing the "else" clause.
        break
    else:
        # "Continue" starts the next iteration
        # of the loop. It's rather useless here,
        # as it's the last statement of the loop.
        continue
else:
    # The "else" clause is optional and is
    # executed only if the loop didn't "break".
    pass # Do nothing

if rangelist[1] == 2:
    print("The second item (lists are 0-based) is 2")
elif rangelist[1] == 3:
    print("The second item (lists are 0-based) is 3")
else:
    print("Dunno")

while rangelist[1] == 1:
    print("We are trapped in an infinite loop!")

Chức năng

Các hàm được tuyên bố bằng từ khóa def. Các đối số tùy chọn được đặt trong tuyên bố hàm sau các đối số bắt buộc bằng cách được gán giá trị mặc định. Đối với các đối số có tên, tên của đối số được gán giá trị. Các hàm có thể trả về một tuple (và sử dụng giải nén tuple bạn có thể trả về nhiều giá trị hiệu quả). Các hàm lambda là các hàm ad hoc bao gồm một câu chỉ dẫn duy nhất. Các tham số được truyền qua tham chiếu, nhưng các loại không thể thay đổi (tuples, int, string, vv) không thể được thay đổi trong người gọi. Điều này là bởi vì chỉ vị trí bộ nhớ của mục được truyền, và việc ràng buộc một đối tượng khác với một biến loại bỏ đối tượng cũ, vì vậy các loại không thể thay thế được thay thế. Ví dụ:

# Same as def funcvar(x): return x + 1
funcvar = lambda x: x + 1
>>> print(funcvar(1))
2

# an_int and a_string are optional, they have default values
# if one is not passed (2 and "A default string", respectively).
def passing_example(a_list, an_int=2, a_string="A default string"):
    a_list.append("A new item")
    an_int = 4
    return a_list, an_int, a_string

>>> my_list = [1, 2, 3]
>>> my_int = 10
>>> print(passing_example(my_list, my_int))
([1, 2, 3, 'A new item'], 4, "A default string")
>>> my_list
[1, 2, 3, 'A new item']
>>> my_int
10

Các lớp học

Python hỗ trợ một hình thức giới hạn về thừa kế nhiều trong các lớp. Các biến riêng và phương thức có thể được tuyên bố (theo quy ước, điều này không được thực thi bởi ngôn ngữ) bằng cách thêm một dấu gạch dưới dẫn đầu (ví dụ: _spam). Chúng ta cũng có thể liên kết tên tùy ý với các trường hợp lớp. Một ví dụ sau đây:

class MyClass(object):
    common = 10
    def __init__(self):
        self.myvariable = 3
    def myfunction(self, arg1, arg2):
        return self.myvariable

    # This is the class instantiation

>>> classinstance = MyClass()
>>> classinstance.myfunction(1, 2)
3
# This variable is shared by all instances.
>>> classinstance2 = MyClass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Note how we use the class name
# instead of the instance.
>>> MyClass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# This will not update the variable on the class,
# instead it will bind a new object to the old
# variable name.
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> MyClass.common = 50
# This has not changed, because "common" is
# now an instance variable.
>>> classinstance.common
10
>>> classinstance2.common
50

# This class inherits from MyClass. The example
# class above inherits from "object", which makes
# it what's called a "new-style class".
# Multiple inheritance is declared as:
# class OtherClass(MyClass1, MyClass2, MyClassN)
class OtherClass(MyClass):
    # The "self" argument is passed automatically
    # and refers to the class instance, so you can set
    # instance variables as above, but from inside the class.
    def __init__(self, arg1):
        self.myvariable = 3
        print(arg1)

>>> classinstance = OtherClass("hello")
hello
>>> classinstance.myfunction(1, 2)
3
# This class doesn't have a .test member, but
# we can add one to the instance anyway. Note
# that this will only be a member of classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10

Ngoại lệ

Các ngoại lệ trong Python được xử lý bằng các khối try-except [exceptionname]:

def some_function():
    try:
        # Division by zero raises an exception
        10 / 0
    except ZeroDivisionError:
        print("Oops, invalid.")
    else:
        # Exception didn't occur, we're good.
        pass
    finally:
        # This is executed after the code block is run
        # and all exceptions have been handled, even
        # if a new exception is raised while handling.
        print("We're done with that.")

>>> some_function()
Oops, invalid.
We're done with that.

Nhập khẩu

Các thư viện bên ngoài được sử dụng với từ khóa import [libname]. Bạn cũng có thể sử dụng from [libname] import [funcname] cho các chức năng riêng lẻ. Dưới đây là một ví dụ:

import random
from time import clock

randomint = random.randint(1, 100)
>>> print(randomint)
64

File I/O

Python có một loạt các thư viện được xây dựng trong. Ví dụ, đây là cách sử dụng serializing (chuyển đổi cấu trúc dữ liệu thành chuỗi bằng thư viện pickle) với file I/O:

import pickle
mylist = ["This", "is", 4, 13327]
# Open the file C:\\binary.dat for writing. The letter r before the
# filename string is used to prevent backslash escaping.
myfile = open(r"C:\\binary.dat", "wb")
pickle.dump(mylist, myfile)
myfile.close()

myfile = open(r"C:\\text.txt", "w")
myfile.write("This is a sample string")
myfile.close()

myfile = open(r"C:\\text.txt")
>>> print(myfile.read())
'This is a sample string'
myfile.close()

# Open the file for reading.
myfile = open(r"C:\\binary.dat", "rb")
loadedlist = pickle.load(myfile)
myfile.close()
>>> print(loadedlist)
['This', 'is', 4, 13327]

Các loại khác

  • Các điều kiện có thể được chuỗi: 1 < a < 3 kiểm tra xem a có nhỏ hơn 3 và lớn hơn 1.
  • Bạn có thể sử dụng del để xóa biến hoặc mục trong mảng.
  • List comprehensions cung cấp một cách mạnh mẽ để tạo và thao túng danh sách. Chúng bao gồm một biểu thức theo sau là một khoản for theo sau là 0 hoặc nhiều hơn các khoản if hoặc for, như thế này:
>>> lst1 = [1, 2, 3]
>>> lst2 = [3, 4, 5]
>>> print([x * y for x in lst1 for y in lst2])
[3, 4, 5, 6, 8, 10, 9, 12, 15]
>>> print([x for x in lst1 if 4 > x > 1])
[2, 3]
# Check if a condition is true for any items.
# "any" returns true if any item in the list is true.
>>> any([i % 3 for i in [3, 3, 4, 4, 3]])
True
# This is because 4 % 3 = 1, and 1 is true, so any()
# returns True.

# Check for how many items a condition is true.
>>> sum(1 for i in [3, 3, 4, 4, 3] if i == 4)
2
>>> del lst1[0]
>>> print(lst1)
[2, 3]
>>> del lst1
  • Các biến toàn cầu được tuyên bố bên ngoài các hàm và có thể được đọc mà không cần bất kỳ tuyên bố đặc biệt nào, nhưng nếu bạn muốn viết cho chúng, bạn phải tuyên bố chúng ở đầu hàm với từ khóa global, nếu không Python sẽ liên kết đối tượng đó với một biến địa phương mới (hãy cẩn thận, đó là một câu bắt nhỏ có thể giúp bạn nếu bạn không biết nó). Ví dụ:
number = 5

def myfunc():
    # This will print 5.
    print(number)

def anotherfunc():
    # This raises an exception because the variable has not
    # been bound before printing. Python knows that it an
    # object will be bound to it later and creates a new, local
    # object instead of accessing the global one.
    print(number)
    number = 3

def yetanotherfunc():
    global number
    # This will correctly change the global.
    number = 3

Tóm tắt

Bài hướng dẫn này không có nghĩa là một danh sách đầy đủ của tất cả (hoặc thậm chí một tập con) của Python. Python có một loạt các thư viện và nhiều chức năng khác mà bạn sẽ phải khám phá thông qua các phương tiện khác, chẳng hạn như cuốn sách tuyệt vời Thâm nhập vào Python. Tôi hy vọng tôi đã làm cho quá trình chuyển đổi của bạn trong Python dễ dàng hơn. Xin vui lòng để lại bình luận nếu bạn tin rằng có một cái gì đó có thể được cải thiện hoặc thêm hoặc nếu có bất cứ điều gì khác bạn muốn xem (lớp học, xử lý lỗi, bất cứ điều gì).


Thêm nữa