4.3 Memulakan dengan bahasa Python

Penulis:Kebaikan, Dicipta: 2019-04-28 09:55:02, Dikemas kini:

Peluh awal

Oleh itu, anda ingin belajar bahasa pengaturcaraan Python tetapi tidak dapat mencari tutorial ringkas dan penuh ciri. Tutorial ini akan cuba mengajar anda Python dalam 10 minit. Ini mungkin bukan tutorial kerana ia adalah persilangan antara tutorial dan cheatsheet, jadi ia hanya akan menunjukkan beberapa konsep asas untuk memulakan anda. Jelas, jika anda benar-benar ingin belajar bahasa anda perlu memprogram di dalamnya untuk sementara waktu. Saya akan menganggap bahawa anda sudah biasa dengan pengaturcaraan dan oleh itu akan melangkau kebanyakan perkara yang tidak khusus bahasa. Kata kunci penting akan disorot supaya anda dapat dengan mudah melihatnya. Juga, kerana kesempitan tutorial ini, beberapa perkara akan diperkenalkan secara langsung dalam kod dan hanya dikomentari secara ringkas.

Kita akan fokus pada Python 3, kerana itu adalah versi yang anda harus gunakan. semua contoh dalam buku adalah dalam Python 3, dan jika sesiapa menasihati anda untuk menggunakan 2, mereka bukan kawan anda.

Ciri-ciri

Python sangat ditypkan (iaitu jenis yang dikuatkuasakan), dinamik, secara tersirat ditypkan (iaitu anda tidak perlu mengisytiharkan pembolehubah), sensitif huruf besar (iaitu var dan VAR adalah dua pembolehubah yang berbeza) dan berorientasikan objek (iaitu segala-galanya adalah objek).

Mendapatkan bantuan

Bantuan dalam Python sentiasa tersedia di penerjemah. Jika anda ingin tahu bagaimana objek berfungsi, yang perlu anda lakukan adalah memanggil help() ! Juga berguna adalah dir() , yang menunjukkan semua kaedah objek, dan .Doktor., yang menunjukkan rentetan dokumentasinya:

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

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

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

Return the absolute value of the argument.

Sintaks

Python tidak mempunyai watak pengakhiran pernyataan wajib dan blok ditentukan dengan penggoresan. Indent untuk memulakan blok, dedent untuk menamatkan satu. Perkataan yang mengharapkan tahap penggoresan berakhir dengan titik titik (:). Komen bermula dengan tanda pound (#) dan berbaris tunggal, rentetan pelbagai baris digunakan untuk komen berbaris. Nilai diberikan (pada hakikatnya, objek terikat dengan nama) dengan tanda sama (=), dan ujian kesamaan dilakukan menggunakan dua tanda sama (==). Anda boleh meningkatkan / mengurangkan nilai menggunakan operator += dan -= masing-masing dengan jumlah sebelah kanan. Ini berfungsi pada banyak jenis data, termasuk rentetan. Anda juga boleh menggunakan beberapa pembolehubah pada satu baris. Sebagai contoh:

>>> 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

Jenis data

Struktur data yang tersedia dalam python adalah senarai, tuples dan kamus. Set tersedia di perpustakaan set (tetapi terbina dalam Python 2.5 dan kemudian). Senarai seperti array satu dimensi (tetapi anda juga boleh mempunyai senarai senarai lain), kamus adalah array asosiatif (juga dikenali sebagai jadual hash) dan tuples adalah array satu dimensi yang tidak dapat diubah (Python arrays boleh menjadi jenis apa pun, jadi anda boleh mencampurkan contohnya bilangan bulat, rentetan, dll dalam senarai / kamus / tuples). Indeks item pertama dalam semua jenis array adalah 0. Bilangan negatif dikira dari akhir ke awal, -1 adalah item terakhir. Peralihan boleh menunjuk fungsi. Penggunaannya adalah seperti berikut:

>>> 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

Anda boleh mengakses julat array menggunakan titik koma (:). Meninggalkan indeks permulaan kosong mengandaikan item pertama, meninggalkan indeks akhir mengandaikan item terakhir. Pengindeksan termasuk-eksklusif, jadi menentukan [2:10] akan mengembalikan item [2] (item ketiga, kerana pengindeksan 0) kepada [9] (item kesepuluh), termasuk (8 item). Indeks negatif mengira dari item terakhir ke belakang (maka -1 adalah item terakhir) seperti ini:

>>> 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]

String

Stringnya boleh menggunakan tanda petikan tunggal atau berganda, dan anda boleh mempunyai tanda petik satu jenis di dalam rentetan yang menggunakan jenis yang lain (iaitu Dia berkata hello. sah).petikan tiga kali ganda (atau tunggal)(). Senar Python sentiasa Unicode, tetapi terdapat jenis senar lain yang byte tulen. Mereka dipanggil bystrings dan diwakili dengan awalan b, contohnya bHello \xce\xb1. Untuk mengisi senar dengan nilai, anda menggunakan operator % (modulo) dan tuple. Setiap %s digantikan dengan item dari tuple, kiri ke kanan, dan anda juga boleh menggunakan penggantian kamus, seperti ini:

>>> 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!

Pernyataan kawalan aliran

Perkataan kawalan aliran adalah if, for, dan while. Tidak ada switch; sebaliknya, gunakan jika. Gunakan untuk menghitung melalui ahli senarai. Untuk mendapatkan urutan nombor yang boleh anda ulangi, gunakan range() . Sintaks perkataan ini adalah sebagai berikut:

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!")

Fungsi

Fungsi diisytiharkan dengan kata kunci def. Argumen pilihan ditetapkan dalam deklarasi fungsi selepas argumen wajib dengan diberikan nilai lalai. Untuk argumen yang dinamakan, nama argumen diberikan nilai. Fungsi boleh mengembalikan tuple (dan menggunakan unpacking tuple anda dapat mengembalikan beberapa nilai dengan berkesan). Fungsi lambda adalah fungsi ad hoc yang terdiri daripada satu pernyataan. Parameter diteruskan dengan rujukan, tetapi jenis yang tidak dapat diubah (tuples, int, string, dll) tidak boleh diubah dalam pemanggil oleh pemanggil. Ini kerana hanya lokasi memori item diteruskan, dan mengikat objek lain kepada pembolehubah membuang yang lama, jadi jenis yang tidak dapat diubah diganti. Sebagai contoh:

# 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

Kelas

Python menyokong satu bentuk yang terhad warisan berganda dalam kelas. pembolehubah peribadi dan kaedah boleh diisytiharkan (dengan konvensyen, ini tidak dikuatkuasakan oleh bahasa) dengan menambah tanda bawah utama (contohnya _spam). kita juga boleh mengikat nama sewenang-wenang kepada contoh kelas. contoh berikut:

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

Pengecualian

Pengecualian dalam Python dikendalikan dengan blok try-except [nama pengecualian]:

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.

Mengimport

Perpustakaan luaran digunakan dengan kata kunci import [libname]. Anda juga boleh menggunakan from [libname] import [funcname] untuk fungsi individu. Berikut adalah contoh:

import random
from time import clock

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

File I/O

Python mempunyai pelbagai perpustakaan terbina dalam. Sebagai contoh, berikut adalah cara mengurutkan (mengubah struktur data menjadi rentetan menggunakan perpustakaan pickle) dengan fail I / O digunakan:

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]

Pelbagai

  • Keadaan boleh berantai: 1 < a < 3 memeriksa bahawa a adalah kedua-dua kurang daripada 3 dan lebih besar daripada 1.
  • Anda boleh menggunakan del untuk memadamkan pembolehubah atau item dalam array.
  • Pemahaman senarai menyediakan cara yang kuat untuk membuat dan memanipulasi senarai. Mereka terdiri daripada ungkapan diikuti oleh klausa for diikuti oleh sifar atau lebih if atau for klausa, seperti ini:
>>> 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
  • Variabel global diisytiharkan di luar fungsi dan boleh dibaca tanpa apa-apa pengisytiharan khas, tetapi jika anda ingin menulis kepada mereka anda mesti mengisytiharkan mereka di awal fungsi dengan kata kunci global, jika tidak Python akan mengikat objek itu ke pembolehubah tempatan baru (hati-hati dengan itu, ia adalah tangkapan kecil yang boleh mendapatkan anda jika anda tidak tahu).
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

Epilog

Tutorial ini tidak dimaksudkan untuk menjadi senarai lengkap semua (atau bahkan subset) Python. Python mempunyai pelbagai perpustakaan dan banyak lagi fungsi yang perlu anda temui melalui cara lain, seperti buku yang sangat baik Dive into Python. Saya harap saya telah membuat peralihan anda di Python lebih mudah. Sila tinggalkan komen jika anda percaya ada sesuatu yang boleh diperbaiki atau ditambah atau jika ada sesuatu yang lain yang anda ingin lihat (kelas, penanganan ralat, apa-apa).


Lebih lanjut