《Python基础教程》第1章笔记👉https://blog.csdn.net/holeer/article/details/143052930
附录A 简明教程
这是一个简明教程,根据本书作者在网上发表的教程“Instant Python”改编而成,针对的读者是:熟悉一两门语言,但想快速掌握Python的程序员。
A.1 基础知识
要想对Python语言有基本认识,可将其视为伪代码,因为它们很像。变量没有类型,因此不需要声明。变量在你给它赋值时出现,在你不再使用时消失。
(1)赋值是使用运算符=
完成的,(相等性检查由运算符==
执行)可同时给多个变量赋值。示例如下。
x = 42
x,y,z = 1,2,3
first, second = second, first
a = b = 123
(2)语句块通过且只能通过缩进来表示(不使用begin/end,也不使用花括号)。下面是一些常见的控制结构:
if x < 5 or (x > 10 and x < 20):print("The value is OK.")if x < 5 or 10 < x < 20:print("The value is OK.")# 以#打头的行是注释,将被解释器忽略。
# 以上两个示例等价。for i in [1, 2, 3, 4, 5]:print("This is iteration number", i)x = 10
while x >= 0:print("x is still not negative.")x = x - 1# for循环中的索引变量遍历(使用方括号表示的)列表的元素。要编写普通的for循环(即计数循环),可使用内置函数range。
# 打印0~99(含)的值
for value in range(100):print(value)
(3)下面来介绍基本的用户交互。要提示用户输入并获取这些输入,可使用内置函数input。函数input
显示(可选的)提示语,并让用户输入一个字符串。
x = float(input("Please enter a number:"))
print("The square of that number is", x * x)
函数input显示(可选的)提示语,并让用户输入一个字符串。在这里,需要的是一个数,因此使用float将输入转换为浮点数。
(4)接着是一些华丽的数据结构,其中最重要的是列表和字典。
①列表
# 列表是使用方括号表示的,并且允许嵌套。
name = ["Cleese", "John"]
x = [[1, 2, 3], [y, z], [[[]]]]
# 列表的优点之一是,可通过索引和切片访问其单个元素或一系列元素。索引是通过在列表名后面加上用方括号括起的数字实现的。(第一个元素的索引为0)
print(name[1], name[0]) # 期望输出:"John Cleese"
name[0] = "Smith"
# 切片几乎与索引相同,但需要指定起始索引和结束索引,并用冒号(:)分隔它们。请注意,不包含结束索引对应的元素。如果省略了一个索引,将假定你要从列表开头开始或到列表末尾结束。比如,切片x[:3]意味着从列表开头到第4个元素(不含)之间的所有元素,切片x[3:]意味着从第4个元素(含)开始到最后一个元素(含)的所有元素。还可使用负数索引,如x[-3]就是从列表末尾往前数的第3个元素。
x = ["SPAM", "SPAM", "SPAM", "SPAM", "SPAM", "eggs", "and", "SPAM"]
print(x[5:7]) # 打印列表["eggs", "and"]
②字典
字典类似于列表,只是其内容是无序的。字典的每个元素都有键(名称)可用来查找元素,就像真正的字典一样。
# 创建字典的语法示例如下
phone = {"Alice" : 23452532, "Boris" : 252336,"Clarice" : 2352525, "Doris" : 23624643 }
person = {'first name': "Robin", 'last name': "Hood",'occupation': "Scoundrel" }
print(person["occupation"]) # 获得person的职业
person['last name'] = "of Locksley" # 修改person的姓
与列表一样,字典也可包含其他字典或列表。当然,列表也可包含字典。通过这样的嵌套,可轻松地创建非常复杂的数据结构。
A.2 函数
下一步是抽象。 你要给代码段指定名称,并使用一些参数来调用它。换而言之,你想定义函数(也叫过程)。
# 用关键字def定义函数
def square(x):return x * xprint(square(2)) # 期望输出:4
# return语句用于从函数返回值。
向函数传递参数时,就将值赋给了参数,即创建了一个新引用。这意味着可在函数中直接修改原始值,但如果让参数指向其他东西(重新绑定它),将不会影响原始值。这与Java类似。示例如下:
def nochange(x):x = 0y = 1
nochange(y)
print(y) # 将会打印1
然而,如果传入的是列表(或字典、对象),并在函数中修改了它,这些修改将反映到调用函数的地方。如果要创建列表a的副本,可使用b=a[:]
。
def change(x):x[1] = 4y = [1, 2, 3]
change(y)
print(y) # 将会打印[1,4,3]
在Python中,函数也可以作为值存储在变量中。因此,如果有函数square,可以这么做:
queeble = square
print(queeble(2)) # 打印4
在函数中,指定了默认值的参数是可选的,比如def spam(age=32): ...
,调用它时如果不指定参数,参数age将为默认值32。
A.3 对象及相关内容
预备知识:面向对象编程的工作原理。(可参阅第7章)
在Python中,使用关键字class来定义类,如下所示:
class Basket:# 对象中定义的函数称为方法,所有方法必不可少的第一个参数是selfdef __init__(self, contents=None): self.contents = contents or [] def add(self, element): self.contents.append(element) def print_me(self): result = "" for element in self.contents: result = result + " " + repr(element) print("Contains:", result)
可像这样来调用方法:object.method(arg1, arg2)
。
在Python类中,方法和成员变量(属性)都是不受保护的,即不能指定为私有的。封装不过是一种编程风格。(如果确实需要,可使用命名约定来实现一定程度的保护,如让名称以一个或两个下划线开头。)
在Python中,所有的值都可用作逻辑值,其中一些空值(如False、[]、0、"“和None)表示逻辑假,而其他值(如True、[0]、1和"Hello, world”)都表示逻辑真。
对于诸如a and b
的逻辑表达式,像下面这样计算其值:检查a是否为真。如果不是,就直接返回它。如果是,就直接返回b。对于逻辑表达式a or b,则像下面这样计算其值:如果a为真,就返回它。否则,就返回b。以上机制称为短路逻辑。
在Python中,开头和结尾都是两个下划线的方法称为魔法方法,比如上文的__init__
。方法__str__
定义了对象被视为字符串时是什么样的。在Basket类中,可使用下面的方法来替换print_me
。替换之后,可以用print(b)
打印Basket对象b。
def __str__(self):result = "" for element in self.contents:result = result + " " + repr(element)return "Contains: " + result
要派生出子类,可像下面这样做:
class SpamBasket(Basket):# ...
Python支持多继承,因此可在括号内指定多个由逗号分隔的超类。构造函数是通过定义特殊成员函数__init__来提供的。假设SpamBasket包含构造函数__init__(self, type)
,则可像下面这样创建其实例:y =SpamBasket("apples")
。在SpamBasket的构造函数中,如果需要调用一个或多个超类的构造函数,可像下面这样做:super().__init__()
。
A.4 补充知识
大多数函数和类都放在模块中,而模块其实就是文件扩展名为.py的文本文件,其中包含Python代码。你可在程序中通过导入来使用这些函数和类。示例如下。(标准库模块可参阅第10章)
# 要使用标准模块math中的函数sqrt,可以这么做:
import math
x = math.sqrt(y)
# 也可以这么做:
from math import sqrt
x = sqrt(y)
导入模块/脚本时,将运行其中的所有代码。要让你的程序既是可导入的模块又是可运行的程序,可在末尾添加类似于这样的代码:if __name__ == "__main__": main()
。这种写法很奇妙,相当于说:如果这个模块是作为可执行的脚本运行的(即不是将其导入其他脚本),就调用函数main。当然,可以在上述语句的冒号后面加上代码块。
在UNIX中,要创建可执行的脚本,可将下面的代码作为第一行,让脚本能够独立地运行:#!/usr/bin/env python
有些操作(如除以零或读取不存在的文件)会导致错误,即异常。如果异常未得到处理,程序将终止并打印一条错误消息。要避免出现这种情况,可使用try/except语句,如下所示:
def safe_division(a, b):try:return a/bexcept ZeroDivisionError: pass
ZeroDivisionError是一种标准异常。在问题通常不会发生但有可能发生时,使用异常可避免执行代价高昂的测试等工作。你可以创建自定义异常,并在合适的时候引发它们。
就介绍到这里,但愿你有所收获。现在就去自行尝试吧,但别忘了Python学习箴言:利用源代码进行学习(这基本上意味着阅读能够获得的所有代码)。