个性化阅读
专注于IT技术分析

python3快速入门学习总结 – Python3教程

上一章Python教程请查看:python C语言扩展编程

Python是一种强大的编程语言,非常适合脚本和快速应用程序开发,它用于web开发(如Django和Bottle)、科学和数学计算(Orange、y、NumPy)以及桌面图形用户界面(Pygame、Panda3D)。

本系列教程向你介绍Python 3的基本概念和特性,在阅读完本教程之后,你将能够阅读和编写基本的Python程序,并可以自己深入探索Python。

本教程的目标读者是具有其他编程语言知识并希望快速开始使用Python的人。

本章涉及哪些内容?

  • 在计算机上运行Python
  • 介绍(变量,操作符,I/O,…)
  • 数据结构(列表、字典、集合、…)
  • 控制流(if, loop, break,…)
  • 文件(文件处理,目录,…)
  • 异常(处理、用户定义异常……)
  • OOP(对象和类,继承,重载,…)
  • 标准库(内置函数,列表方法,…)
  • 杂项(生成器,装饰器,…)

在计算机上运行Python

学习本教程不需要在计算机上安装Python,但是我们建议你在自己的计算机上运行本教程中包含的Python程序。

Python的介绍

让我们编写我们的第一个Python程序,“Hello, World!”这是一个简单的程序,在标准输出设备(屏幕)上打印一个字符串。

print("Hello, World!");

在这个程序中,我们使用了内置的print()函数来打印Hello, world!字符串。

变量和常量

变量是用于在内存中的指定位置存储数据,这里有一个例子:

a = 5  

这里a是一个变量,我们给变量a赋值5。

我们不需要在Python中定义变量类型,你可以这样做:

a = 5
print("a =", 5)
a = "Music"
print("a =", a)

这里将整数值5分配给变量a,然后将字符串Music分配给相同的变量。

顺便说一下,5是数字字面量,“Music”是字符串字面量。

操作符

操作符是对操作数(变量和值)进行操作的特殊符号。

让我们在这一部分讨论算术和赋值运算符。

算术运算符被用来执行数学运算,如加法、减法、乘法等。

x = 14
y = 4

# 将两个操作数相加
print('x + y =', x+y) # 18

# 减法
print('x - y =', x-y) # 10

# 乘法
print('x * y =', x*y) # 56

# 除法 
print('x / y =', x/y)

# 向下除法
print('x // y =', x//y) 

# 左操作数除以右操作数的余数
print('x % y =', x%y)  
# 左操作数的右次方(x^y)
print('x ** y =', x**y) 

赋值运算符用于为变量赋值,你已经看到了=运算符的用法,让我们尝试更多的赋值运算符。

x = 5

# x += 5 ----> x = x + 5
x +=5
print(x)

# x /= 5 ----> x = x / 5
x /= 5
print(x)

其他常用的赋值操作符:-=、*=、%=、//=和**=。

获取用户输入

在Python中,可以使用input()函数获取用户的输入。例如:

inputString = input('输入一个句子:')
print('输入字符串为:', inputString)

Python的注释

在Python中有3种创建注释的方法。

# 这是一个注释

  """这是一个 
    多行
注释"""

  '''这也是一个
     多行
     注释'''

类型转换

将一种数据类型(整数、字符串、浮点数等)的值转换为另一种数据类型的过程称为类型转换,Python有两种类型的类型转换。

隐式类型转换

隐式转换不需要任何用户参与。例如:

num_int = 123  # 整数类型
num_flo = 1.23 # 浮点类型

num_new = num_int + num_flo

print("num_new:",num_new)
print("num_new的类型:",type(num_new))

这里num_new具有浮点数据类型,因为Python总是将较小的数据类型转换为较大的数据类型,以避免数据丢失。

下面是一个Python解释器不能隐式转换类型的例子。

num_int = 123     # int类型
num_str = "456"   # str类型

print(num_int+num_str)

当你运行程序时,你会得到类型错误:TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’。

但是,Python有一个解决这种情况的解决方案,称为显式转换。

显式转换

对于显式转换,将对象的数据类型转换为所需的数据类型。我们使用预定义的函数,如int()、float()、str()等来执行显式类型转换。例如:

num_int = 123  # int
num_str = "456" # str

# 显式转换为int类型
num_str = int(num_str) 

print(num_int+num_str)

Python数值类型

Python支持整数、浮点数和复数,在Python中,它们被定义为int、float和complex类。此外,布尔值:True和False是整数的子类型。

# 输出: <class int>
print(type(5))

# 输出: <class float>
print(type(5.0))

# <class complex>
c = 5 + 3j
print(type(c))

Python数据结构

Python提供了一系列复合数据类型,通常称为序列。在本节中,你将了解这些内置类型。

列表

通过将所有项(元素)放在由逗号分隔的方括号[]中来创建列表。

它可以有任意数量的项目,它们可能是不同的类型(整数、浮点数、字符串等)。

# 空列表
my_list = []
# 整数列表
my_list = [1, 2, 3]
# 混合数据类型的列表
my_list = [1, "Hello", 3.4]

还可以使用list()函数创建列表。

下面是访问列表元素的方法。

language = ["Espanol", "German", "English", "Chinese"]

# 访问第一个元素
print(language[0])

# 访问第四个元素
print(language[3])

使用索引操作符[]访问列表中的项,Index从0开始,一个有10个元素的列表的索引是从0到9。

Python还允许对其序列进行负索引,下标-1表示最后一项,下标-2表示倒数第二项,依此类推。

元组

Tuple类似于列表,只是在定义了Tuple之后不能更改它的元素,而在列表中,可以修改项。

基本上,list是可变的,而tuple是不可变的。

language = ("Espanol", "German", "English", "Chinese")
print(language)

你还可以使用tuple()函数来创建元组。

你可以以类似于列表的方式访问元组的元素。

language = ("Espanol", "German", "English", "Chinese")

print(language[1]) #输出: German
print(language[3]) #输出: Chinese
print(language[-1]) # 输出: Chinese

你不能删除元组的元素,但是,你可以使用del操作符完全删除元组本身。

language = ("Espanol", "German", "English", "Chinese")
del language

# NameError: name 'language' is not defined
print(language)

字符串

字符串是字符序列,下面是创建字符串的不同方法。

# 下面这些都是等价的
my_string = 'Hello'
print(my_string)

my_string = "Hello"
print(my_string)

my_string = '''Hello'''
print(my_string)

# 三重引号字符串可以扩展多行
my_string = """Hello, welcome to
           the world of Python"""
print(my_string)

可以使用索引(类似于列表和元组)访问字符串的各个字符。

str = 'srcmini'
print('str = ', str)

print('str[0] = ', str[0]) # 输出: p

print('str[-1] = ', str[-1]) # 输出: z

# 切割2到5个字符
print('str[1:5] = ', str[1:5]) # 输出: rogr

# 最后一个字符从6位切到2位
print('str[5:-2] = ', str[5:-2]) # 输出: am

字符串是不可变的,一旦指定了字符串,就不能更改它的元素。但是,可以将一个字符串分配给另一个字符串。另外,可以使用del操作符删除字符串。

连接可能是最常见的字符串操作,要连接字符串,可以使用+运算符,类似地,可以使用*操作符重复给定次数的字符串。

str1 = 'Hello '
str2 ='World!'

# 输出: Hello World!
print(str1 + str2)

# Hello Hello Hello
print(str1 * 3)

集合

集合是项目的无序集合,其中每个元素都是唯一的(没有重复)。

下面是如何在Python中创建集合。

# 整数集合
my_set = {1, 2, 3}
print(my_set)

# 混合类型集合
my_set = {1.0, "Hello", (1, 2, 3)}
print(my_set)

还可以使用set()函数来创建集合。

集是可变的,你可以添加、删除和删除一个集合中的元素,但是,你不能用另一个集合中的一个元素替换另一个集合中的一个元素,因为它们是无序的,并且索引没有任何意义。

让我们尝试常用的set方法:add()、update()和remove()。

my_set = {1, 2, 3}

my_set.add(4)
print(my_set) # 输出: {1, 2, 3, 4}

my_set.add(2)
print(my_set) # 输出: {1, 2, 3, 4}

my_set.update([3, 4, 5])
print(my_set) # 输出: {1, 2, 3, 4, 5}

my_set.remove(4)
print(my_set) # 输出: {1, 2, 3, 5}

让我们尝试一些常用的集合操作

A = {1, 2, 3}
B = {2, 3, 4, 5}

# 相当于A.union(B)
# 也相当于B.union(A)
print(A | B) # 输出: {1, 2, 3, 4, 5}

# 相当于A.intersection(B)
# 也相当于B.intersection(A)
print (A & B) # 输出: {2, 3}

# 差集
print (A - B) # 输出: {1}

# 对称差分
print(A ^ B)  # 输出: {1, 4, 5}

字典

Dictionary是一个无序的项集合,其他复合数据类型只有值作为元素,而字典有一个键:值对。例如:

# 空字典
my_dict = {}

# 整数键值
my_dict = {1: 'apple', 2: 'ball'}

# 混合类型的键值
my_dict = {'name': 'John', 1: [2, 4, 3]}

还可以使用dict()函数创建字典。

要从字典中访问值,可以使用key。例如:

下面介绍如何更改、添加或删除dictionary元素。

person = {'name':'Jack', 'age': 26}

# 更改为36
person['age'] = 36 
print(person) # 输出: {'name': 'Jack', 'age': 36}

# 添加键值对
person['salary'] = 4342.4
print(person) # 输出: {'name': 'Jack', 'age': 36, 'salary': 4342.4}

# 删除
del person['age']
print(person) # 输出: {'name': 'Jack', 'salary': 4342.4}

# 删除整个字典
del person

Python range()

range()返回给定的开始整数到停止整数之间的不可变的数字序列。

print(range(1, 10)) # 输出: range(1, 10)

输出是一个可迭代的,你可以将其转换为list、tuple、set等。例如

numbers = range(1, 6)

print(list(numbers)) # 输出: [1, 2, 3, 4, 5]
print(tuple(numbers)) # 输出: (1, 2, 3, 4, 5)
print(set(numbers)) # 输出: {1, 2, 3, 4, 5}

# 输出: {1: 99, 2: 99, 3: 99, 4: 99, 5: 99} 
print(dict.fromkeys(numbers, 99))

在上面的例子中,我们省略了range()的可选步骤参数,省略时,步骤默认为1,让我们尝试一些带有step参数的示例。

# 等价于: numbers = range(1, 6)
numbers1 = range(1, 6 , 1)
print(list(numbers1)) # 输出: [1, 2, 3, 4, 5]

numbers2 = range(1, 6, 2)
print(list(numbers2)) # 输出: [1, 3, 5]

numbers3 = range(5, 0, -1)
print(list(numbers3)) # 输出: [5, 4, 3, 2, 1]

Python控制流

if……else语句

if……else语句用于在不同的条件下执行不同的操作(运行不同的代码)。例如:

num = -1

if num > 0:
    print("正数")
elif num == 0:
    print("0")
else:
    print("负数")
    
# 输出: 负数

可以有零个或多个elif部分,而else部分是可选的。

大多数编程语言使用{}来指定代码块,而Python使用缩进。

代码块以缩进开始,以第一个未缩进的行结束。缩进的数量由你决定,但必须在整个块中保持一致。

通常四个空白用于缩进,并且优先于制表符。

我们再举一个例子:

if False:
  print("inside the body")
  print("also inside the body")
print("outside")

# 输出: outside

在进入下一节之前,我们建议你检查比较运算符和逻辑运算符。

while循环

与大多数编程语言一样,while循环用于在测试表达式(条件)为真时遍历代码块,下面是一个求自然数和的例子:

n = 100

# 初始化sum和计数器
sum = 0
i = 1

while i <= n:
    sum = sum + i
    i = i+1    # 更新计数器

print("sum: ", sum)

# 输出: sum: 5050

在Python中,while循环可以有可选的else块,如果while循环中的条件计算结果为False,则执行else块。但是,如果循环使用break语句终止,Python解释器将忽略else块。

for循环

在Python中,for循环用于遍历序列(列表、元组、字符串)或其他可迭代对象,遍历一个序列称为遍历。

下面是一个用于查找存储在列表中的所有数字的和的示例。

numbers = [6, 5, 3, 8, 4, 2]

sum = 0

# 遍历列表
for val in numbers:
  sum = sum+val

print("sum: ", sum) 

注意上面示例中in操作符的使用,如果在序列中找到值/变量,in操作符将返回True。

在Python中,for循环可以有可选的else块,如果for循环中使用的序列中的项耗尽,则执行else部分。但是如果循环使用break语句终止,Python解释器将忽略else块。

break语句

break语句终止包含它的循环,程序的控制立即在循环体之后流向语句,例如:

for val in "string":
    if val == "r":
        break
    print(val)

print("The end")

continue语句

continue语句用于仅针对当前迭代跳过循环内的其余代码,循环不会终止,而是继续下一个迭代,例如:

for val in "string":
    if val == "r":
        continue
    print(val)

print("The end")

pass语句

假设你有一个尚未实现的循环或函数,但希望在将来实现它,他们不可能有一个空的body主体,因此,可以使用pass语句构造一个不执行任何操作的主体。

sequence = {'p', 'a', 's', 's'}
for val in sequence:
    pass

Python函数

函数是一组执行特定任务的相关语句,使用def关键字在Python中创建函数。

def print_lines():
  print("line1.")
  print("line2.")

你必须调用函数来运行它里面的代码,方法如下:

def print_lines():
  print("line1.")
  print("line2.")

# 函数调用
print_lines()

函数可以接受参数。

def add_numbers(a, b):
  sum = a + b
  print(sum)

add_numbers(4, 5)

# 输出: 9

还可以使用return语句从函数返回值。

def add_numbers(a, b):
  sum = a + b
  return sum

result = add_numbers(4, 5)
print(result)

# 输出: 9

递归(递归函数)

调用自身的函数称为递归函数,这个过程称为递归。

每个递归函数必须有一个基本条件来停止递归,否则函数将无限地调用自己。

# 求一个数的阶乘的递归函数

def calc_factorial(x):

    if x == 1:
        return 1
    else:
        return (x * calc_factorial(x-1))

num = 6
print(num, "的阶乘: ", calc_factorial(num)) 

Lambda函数

在Python中,可以定义没有名称的函数,这些函数称为lambda或匿名函数,要创建lambda函数,使用lambda关键字。

square = lambda x: x ** 2
print(square(5))

# 输出: 25

当我们短时间内需要一个匿名函数时,我们使用lambda函数,Lambda函数与内置函数一起使用,如filter()、map()等。

模块

模块引用包含Python语句和定义的文件。

包含Python代码的文件,例如:example。称为模块,其模块名为example。

让我们创建它并将其保存为example.py。

# 模块例子
def add(a, b):
   return a + b

要使用此模块,我们使用import关键字。

# import导入模块
import example 
# 访问模块内的函数使用点.操作符
example.add(4, 5.5) 

Python有大量的标准模块可供使用,例如

import math

result = math.log2(5) # 返回以2为底的对数
print(result) # 输出: 2.321928094887362

你可以从模块中导入特定的名称,而不需要整体导入模块。这里有一个例子。

from math import pi
print("PI: ", pi)

Python文件I/O

文件操作按以下顺序进行。

  • 打开一个文件
  • 读或写(执行操作)
  • 关闭文件

如何打开文件?

可以使用open()函数打开文件。

f = open("test.txt")    # 在当前目录打开文件
f = open("C:/Python33/README.txt")  # 指定网站路径

我们可以在打开文件时指定模式。

模式 说明
‘r’ 打开一个文件进行读取(默认)
‘w’ 打开一个文件进行写作。如果文件不存在,则创建新文件;如果文件存在,则截断该文件。
‘x’ 打开文件进行独占创建。如果文件已经存在,则操作失败。
‘a’ 打开文件末尾的附加部分,但不截断它。创建一个不存在的新文件。
‘t’ 以文本模式打开(默认)
‘b’ 二进制模式
‘+’ 打开文件进行更新(读和写)
f = open("test.txt")      # 相当于'r' 或 'rt'
f = open("test.txt",'w')  # 写模式
f = open("img.bmp",'r+b') # 二进制读写模式

如何关闭文件?

要关闭文件,可以使用close()方法。

f = open("test.txt",encoding = 'utf-8')
# 执行文件操作
f.close()

如何写入文件?

为了在Python中写入文件,我们需要在写’w’、附加’a’或独占创建’x’模式中打开它。

with open("test.txt",'w',encoding = 'utf-8') as f:
   f.write("AAA\n")
   f.write("BBB\n\n")
   f.write("EEEE\n")

这里,我们使用with语句来打开一个文件,这可以确保在退出其中的块时关闭文件。

如何读取文件?

要读取Python中的文件,必须以读取模式打开文件。

有各种各样的方法可以达到这个目的,我们可以使用read(size)方法来读取数据的大小。

f = open("test.txt",'r',encoding = 'utf-8')
f.read(4)    # 读取前4个数据

Python目录

目录或文件夹是文件和子目录的集合,Python有os模块,它提供了许多有用的方法来处理目录和文件。

import os
os.getcwd()  // 当前工作目录
os.chdir('D:\\Hello') // 将当前目录更改为D:\Hello
os.listdir()  // 列出该路径中的所有子目录和文件
os.mkdir('test') // 创建一个新的目录测试
os.rename('test','tasty') // 将目录测试重命名为tasty
os.remove('old.txt')  // 删除old.txt文件

Python的异常处理

运行时发生的错误称为异常,例如,当我们试图打开的文件不存在FileNotFoundError时,就会出现这种情况,用一个数字除以零就会出现零分错误等等。

如果不处理异常,就会吐出一条错误消息,我们的程序就会意外地突然停止。

在Python中,可以使用try语句处理异常,当异常被捕获时,由你决定执行什么操作符。

# 导入模块sys获取异常类型
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("entry: ", entry)
        r = 1/int(entry)
        break
    except:
        print(sys.exc_info()[0])
        print("Next entry.")
        print()
print(entry,"的倒数:",r)

要了解如何使用try语句捕获特定的异常和finally子句,请访问Python异常处理。

此外,你还可以在Python中创建用户定义的异常,为此,请访问Python自定义异常

Python的面向对象

Python中的一切都是对象,包括整数、浮点数、函数、类和None,我们不要关注为什么Python中的所有东西都是对象,为此,请访问此页面。相反,本节主要讨论如何创建自己的类和对象。

类和对象

对象只是作用于数据的数据(变量)和方法(函数)的集合,类是对象的蓝图。

如何定义一个类?

class MyClass:
   a = 10
   def func(self):
      print('Hello')  

一旦定义了一个类,就会创建一个具有相同名称的新类对象,这个类对象允许我们访问不同的属性以及实例化该类的新对象。

class MyClass:
  "This is my class"
  a = 10
  def func(self):
    print('Hello')

# 输出: 10
print(MyClass.a)

# 输出: <function 0x0000000003079bf8="" at="" myclass.func="">
print(MyClass.func)

# 输出: 'This is my class'
print(MyClass.__doc__)
</function>

你可能已经注意到了类内部函数定义中的self参数,但是,我们只是简单地将该方法称为ob.func(),没有任何参数,它仍然工作。

这是因为,每当一个对象调用它的方法时,对象本身都会作为第一个参数传递。因此ob.func()转换成MyClass.func(ob)。

创建对象

你还可以自己创建类的对象。

class MyClass:
  "This is my class"
  a = 10
  def func(self):
    print('Hello')

obj1 = MyClass()
print(obj1.a)        # 输出: 10
 
obj2 = MyClass()
print(obj1.a + 5)    # 输出: 15

Python的构造函数

在Python中,名称为_init()__的方法是一个构造函数,在对象实例化时自动调用此方法。

class ComplexNumber:
    def __init__(self,r = 0,i = 0):  # 构造函数
        self.real = r
        self.imag = i

    def getData(self):
        print("{0}+{1}j".format(self.real,self.imag))

c1 = ComplexNumber(2,3) # 创建一个新的ComplexNumber对象
c1.getData() # 输出: 2+3j

c2 = ComplexNumber() # 创建一个新的ComplexNumber对象
c2.getData() # 输出: 0+0j

Python继承

继承指的是定义一个新类,只需要对现有类进行少量或不进行修改。举个例子:

class Mammal:
  def displayMammalFeatures(self):
    print('哺乳动物是温血动物.')

让我们从这个哺乳动物类派生一个新的类Dog。

class Mammal:
  def displayMammalFeatures(self):
    print('哺乳动物是温血动物.')

class Dog(Mammal):
  def displayDogFeatures(self):
    print('狗有四条腿.')

d = Dog()
d.displayDogFeatures()
d.displayMammalFeatures()

注意,我们能够从派生类d的对象中调用基类displayMammalFeatures()的方法。

如果你感兴趣,我们还建议你查看之后的教程中的多重继承和操作符重载。

杂项和前沿主题

迭代器

Python中的Iterator只是一个可以迭代的对象。一个对象,它一次返回一个元素。

从技术上讲,Python迭代器对象必须实现两种特殊的方法,即iter__()和next__(),它们统称为迭代器协议。

如果我们可以从一个对象中获得一个迭代器,那么这个对象就称为iterable。Python中的大多数内置容器,如:列表、元组、字符串等,都是可迭代的。

iter()函数(它反过来调用了_iter__()方法)从它们返回一个迭代器。

my_list = [4, 7, 0, 3]

# 使用iter()获得迭代器
my_iter = iter(my_list)

print(next(my_iter)) # 输出: 4
print(next(my_iter)) # 输出: 7

生成器

在Python中构建迭代器有很多开销,我们必须使用_iter__()和_next__()方法来实现一个类,跟踪内部状态,在没有要返回的值时触发StopIteration等等。

这既冗长又违反直觉,生成器在这种情况下可以派上用场。

Python生成器是创建迭代器的一种简单方法。

闭包

这种将一些数据附加到代码中的技术在Python中称为闭包。

def print_msg(msg): # 外函数
    def printer():  # 内部函数
        print(msg)
    return printer  # 这有改变

another = print_msg("Hello") # 输出: Hello
another()

这里,print_msg()函数以字符串“Hello”作为参数被调用,返回的函数被绑定到另一个名称。在调用另一个()时,尽管我们已经完成了print_msg()函数的执行,但是仍然记住了该消息。

要在Python中创建闭包,必须满足以下几点。

  • 我们必须有一个嵌套的函数(函数内的函数)。
  • 嵌套函数必须引用封闭函数中定义的值。
  • 封闭函数必须返回嵌套函数。

装饰器

Python有一个有趣的特性,称为装饰器,用于向现有代码添加功能。

这也称为元编程,因为程序的一部分试图在编译时修改程序的另一部分。

要详细了解decorator,请访问Python decorator。

赞(0)
未经允许不得转载:srcmini » python3快速入门学习总结 – Python3教程

评论 抢沙发

评论前必须登录!