大学四年的Python学习笔记分享之一,内容整理的比较多与仔细

翻到以前在大学坚持记录的Python学习笔记,花了一天的时间整理出来,整理时不经回忆起大学的时光,一眨眼几年就过去了,现在还在上学的你们,一定要珍惜现在,有个充实的校园生活。希望这次的分享对于你们有学习的作用。

一、创建第一个程序

第一个程序的创建、运行解释器和一些基本的调试。

1.1运行 Python

Python 程序总是在解释器中运行。

解释器是一个“基于控制台的”应用程序,通常从命令外壳运行。

Python 3.6.1(v3.6.1:69c0db5050,2017 年 3 月 21 日,01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] 在达尔文
输入“ help ”、“ copyright ”、“ credits ”或“ license ” 以获取更多信息。
>>>

高手程序员用这种方式使用解释器通常是没有问题的,但是对于初学者来说就不太友好了。您可能正在使用为 Python 提供不同接口的环境。这很好,但是学习如何运行 Python 终端仍然是一项有用的技能。

1.2交互模式

当您启动 Python 时,您将获得一个交互模式,您可以在其中进行实验。

如果您开始输入语句,它们将立即运行。没有编辑/编译/运行/调试周期。

>> > 打印( 'hello world' )
hello world
>> > 37 * 42
1554
>> > for i in range ( 5 ):
... 打印(我)
...
0
1
2
3
4
>> >

这种所谓的read-eval-print-loop(或 REPL)对于调试和探索非常有用。

STOP:如果你不知道如何与 Python 交互,停止你正在做的事情并弄清楚如何去做。如果您使用的是 IDE,它可能隐藏在菜单选项或其他窗口后面。

让我们仔细看看 REPL 的元素:

  • >>> 是开始新语句的解释器提示。
  • ...是继续语句的解释器提示。输入一个空行以完成输入并运行您输入的内容。

...提示可能还是取决于您的环境可能不会显示。在本课程中,它显示为空白,以便于剪切/粘贴代码示例。

下划线_保存最后的结果。

>> >  37  *  42
1554
>> > _ * 2
3108
>> > _ + 50
3158
>> >

这仅适用于交互模式。你永远不会_在程序中使用。

1.3创建程序

程序放在.py文件中。

# hello.py
打印('你好世界')

您可以使用您喜欢的文本编辑器创建这些文件。

1.4运行程序

要执行程序,请在终端中使用python命令运行它。例如,在命令行 Unix 中:

bash % python hello.py
你好,世界
重击%

或者从 Windows 外壳:

C:\SomeFolder>hello.py
hello world C:\SomeFolder>c:\python36\python hello.py
hello world

注意:在 Windows 上,您可能需要指定 Python 解释器的完整路径,例如c:\python36\python. 但是,如果 Python 以通常的方式安装,您可能只需键入程序的名称,例如hello.py.

1.5示例程序

让我们解决以下问题:

一天早上,你出去在芝加哥西尔斯大厦旁的人行道上放一张美元钞票。此后的每一天,您出去的账单数量都会翻倍。一叠钞票超过塔的高度需要多长时间?

这是一个解决方案:

#sears.py
bill_thickness = 0.11 * 0.001 # 米(0.11 毫米)
sears_height = 442 # 高度(米)
num_bills = 1
天 = 1 而 num_bills * bill_thickness < sears_height :
打印( day , num_bills , num_bills * bill_thickness )
day = day + 1
num_bills = num_bills * 2 打印('天数',天)
打印('账单数量',num_bills)
打印('最终高度',num_bills * bill_thickness)

当你运行它时,你会得到以下输出:

bash % python3 sears.py
1 1 0.00011
2 2 0.00022
3 4 0.00044
4 8 0.00088
5 16 0.00176
6 32 0.00352
...
21 1048576 115.34336
22 2097152 230.68672
天数 23
票据数 4194304
最终高度 461.37344

使用此程序作为指南,您可以了解有关 Python 的许多重要核心概念。

1.6要注意的点

一个python程序是一系列语句:

a  =  3  +  4
b = a * 2
打印( b )

每条语句都以换行符结束。语句一个接一个地执行,直到控制到达文件的末尾。

1.7注释

注释是不会被执行的文本。

a  =  3  +  4
# 这是一条评论
b = a * 2
打印( b )

注释由 表示#并延伸到行尾。

1.8变量

变量是值的名称。您可以使用从 a 到 z 的字母(小写和大写)。以及字符下划线_。数字也可以是变量名称的一部分,但作为第一个字符除外。

height  =  442  # 有效
_height = 442 # 有效
height2 = 442 # 有效
2 height = 442 # 无效

1.9类型

变量不需要用值的类型声明。类型与右侧的值相关联,而不是变量的名称。

height  =  442            # 一个整数
height = 442.0 # 浮点
height = 'Really high' # 一个字符串

Python 是动态类型的。变量的感知“类型”可能会随着程序执行而改变,具体取决于分配给它的当前值。

1.10区分大小写

Python 区分大小写。大写和小写字母被认为是不同的字母。这些都是不同的变量:

name  =  'Jake'
Name = 'Elwood'
NAME = 'Guido'

语言语句总是小写的。

而 X  <  0:    #行
WHILE X < 0: #ERROR

1.11循环

while语句执行一个循环。

而 num_bills  *  bill_thickness  <  sears_height :
打印( day , num_bills , num_bills * bill_thickness )
day = day + 1
num_bills = num_bills * 2 打印('天数',天)

缩进下面的发言while后,只要会执行的表达式whiletrue

1.12缩进

缩进用于表示组合在一起的语句组。考虑前面的例子:

而 num_bills  *  bill_thickness  <  sears_height :
打印( day , num_bills , num_bills * bill_thickness )
day = day + 1
num_bills = num_bills * 2 打印('天数',天)

缩进将以下语句组合在一起作为重复的操作:

打印(天,num_bills,num_bills * bill_thickness)
day = day + 1
num_bills = num_bills * 2

因为最后的print()语句没有缩进,所以不属于循环。空行只是为了便于阅读。不影响执行。

1.13缩进最佳实践

  1. 使用空格而不是制表符。
  2. 每层使用 4 个空格。
  3. 使用支持 Python 的编辑器。

Python 的唯一要求是同一块内的缩进保持一致。例如,这是一个错误:

而 num_bills  *  bill_thickness  <  sears_height :
打印( day , num_bills , num_bills * bill_thickness )
day = day + 1 # 错误
num_bills = num_bills * 2

1.14条件句

if语句用于执行条件:

if  a  >  b :
print ( '计算机说不' )
else :
print ( '计算机说是' )

您可以通过使用添加额外检查来检查多个条件elif

if  a  >  b :
print ( '计算机说不' )
elif a == b :
print ( '计算机说是' )
else :
print ( '计算机说可能' )

1.15印刷

该print函数使用传递的值生成一行文本。

print ( 'Hello world!' ) # 打印文本 'Hello world!'

您可以使用变量。打印的文本将是变量的值,而不是名称。

x  =  100
print ( x ) # 打印文本 '100'

如果传递多个值给print它们,则它们用空格分隔。

name  =  'Jake'
print ( 'My name is' , name ) # 打印文本 'My name is Jake'

print() 总是在最后放一个换行符。

打印('你好')
打印('我的名字是','杰克')

这打印:

Hello
My name is Jake

可以抑制额外的换行符:

打印('你好',结束= '')
打印('我的名字是','杰克')

此代码现在将打印:

Hello My name is Jake

1.16用户输入

要读取一行键入的用户输入,请使用以下input()函数:

name  =  input ( '输入你的名字:' )
print ( '你的名字是' , name )

input向用户打印提示并返回他们的响应。这对于小程序、学习练习或简单的调试很有用。它并未广泛用于实际程序。

1.17通过语句

有时您需要指定一个空的代码块。关键字pass用于它。

if  a  >  b :
pass
else :
print ( '计算机说假' )

这也称为“无操作”语句。它什么都不做。它用作语句的占位符,以后可能会添加。

二、数字

主要讨论基础数学计算。

2.1数字类型

Python 有 4 种类型的数字:

  1. 布尔值
  2. 整数
  3. 浮点
  4. 复数(虚数)

2.2布尔值 (bool)

布尔值有两个值:TrueFalse.

a  = 真
b = 假

在数值上,它们被评估为值为1, 的整数0

c  =  4  +  True  # 5
d = False
if d == 0 :
print ( 'd is False' )

但是,不要写那样的代码。这会很奇怪。

整数 (int)
任意大小和基数的有符号值:

a  =  37
b = - 299392993727716627377128481812241231
c = 0x7fa8 # 十六进制
d = 0o253 # 八进制
e = 0b10001111 # 二进制

常见操作:

x + y      Add
x - y Subtract
x * y Multiply
x / y Divide (produces a float)
x // y Floor Divide (produces an integer)
x % y Modulo (remainder)
x ** y Power
x << n Bit shift left
x >> n Bit shift right
x & y Bit-wise AND
x | y Bit-wise OR
x ^ y Bit-wise XOR
~x Bit-wise NOT
abs(x) Absolute value

2.3浮点数(浮点数)

使用十进制或指数表示法指定浮点值:

a  =  37.45
b = 4e5 # 4 x 10**5 或 400,000
c = - 1.345e-10

浮点数使用本机 CPU 表示IEEE 754表示为双精度。这double与编程语言 C 中的类型相同。

17 位精度
指数从 -308 到 308

请注意,在表示小数时,浮点数是不精确的。

>> >  a  =  2.1  +  4.2
>> > a == 6.3
错误
>> > a
6.300000000000001
>> >

这不是 Python 问题,而是 CPU 上的底层浮点硬件。

常见操作:

x + y      Add
x - y Subtract
x * y Multiply
x / y Divide
x // y Floor Divide
x % y Modulo
x ** y Power
abs(x) Absolute Value

除了按位运算符之外,这些运算符与整数相同。在math模块中可以找到其他数学函数。

导入 数学
a = 数学。sqrt ( x )
b = 数学。sin ( x )
c = 数学。cos ( x )
d = 数学。tan ( x )
e = 数学。日志( x )

2.4比较

以下比较/关系运算符适用于数字:

x < y      Less than
x <= y Less than or equal
x > y Greater than
x >= y Greater than or equal
x == y Equal to
x != y Not equal to

您可以使用形成更复杂的布尔表达式

andor,not

这里有一些例子:

如果 b  >=  a 和 b  <=  c:
打印('b 在 a 和 c' 之间) 如果 不是(b < a 或 b > c):
打印('b 仍然在 a 和 c' 之间)

2.5转换数字

类型名称可用于转换值:

a  =  int ( x )     # 将 x 转换为整数
b = float ( x ) # 将 x 转换为浮点数

试试看。

>> >  a  =  3.14159
>> > int ( a )
3
>> > b = '3.14159' # 它也适用于包含数字的字符串
>> > float ( b )
3.14159
>> >

三、字符串

介绍处理文本的方法。

3.1表示文字文本

字符串文字是用引号写在程序中的。

# 单引号
a = 'Yeah but no but yes but...' # 双引号
b = "计算机说不" # 三重引号
c = '''
看着我的眼睛,看着我的眼睛,眼睛,眼睛,眼睛,
不要在眼睛周围
,不要在眼睛周围,
看着我的眼睛,你在下。
'''

通常字符串只能跨越一行。三重引号捕获包含在多行中的所有文本,包括所有格式。

使用单 (’) 和双 (") 引号之间没有区别。但是,必须使用用于开始字符串的相同类型的引号来终止它。

3.2字符串转义码

转义码用于表示控制字符和无法直接在键盘上轻松输入的字符。以下是一些常见的转义码:

'\n'      Line feed
'\r' Carriage return
'\t' Tab
'\'' Literal single quote
'\"' Literal double quote
'\\' Literal backslash

3.3字符串表示

字符串中的每个字符在内部存储为所谓的 Unicode“代码点”,它是一个整数。您可以使用以下转义序列指定确切的代码点值:

a = ’ \xf1 ’ # a = ‘ñ’
b = ’ \u2200 ’ # b = ‘∀’
c = ’ \U0001D122 ’ # c = ‘’
d = ‘\N{FOR ALL}’ # d = ’ ∀’
在Unicode字符数据库是所有可用的字符代码的参考。

3.4字符串索引

字符串就像访问单个字符的数组一样工作。您使用从 0 开始的整数索引。负索引指定相对于字符串末尾的位置。

a  =  'Hello world'
b = a [ 0 ] # 'H'
c = a [ 4 ] # 'o'
d = a [ - 1 ] # 'd'(字符串结束)

您还可以切片或选择指定索引范围的子字符串:

d  =  a [: 5 ]      # 'Hello'
e = a [ 6 :] # 'world'
f = a [ 3 : 8 ] # 'lo wo'
g = a [ - 5 :] # 'world'

不包括结束索引处的字符。缺少索引假定字符串的开头或结尾。

3.5字符串操作

串联、长度、成员资格和复制。

# 连接 (+)
a = 'Hello' + 'World' # 'HelloWorld'
b = 'Say ' + a # 'Say HelloWorld' # 长度 (len)
s = '你好'
len ( s ) # 5 # 成员资格测试 (`in`, `not in`)
t = 'e' in s # True
f = 'x' in s # False
g = 'hi' not in s # True # 复制 (s * n)
rep = s * 5 # 'HelloHelloHelloHelloHello'

3.6字符串方法

字符串具有对字符串数据执行各种操作的方法。

示例:剥离任何前导/尾随空格。

s  =  '你好'
t = s。strip () #'你好'

示例:大小写转换。

s  =  '你好'
l = s。下() # '你好'
u = s . 上() #'你好'

示例:替换文本。

s  =  '你好世界'
t = s。replace ( 'Hello' , 'Hallo' ) # '你好世界'

更多字符串方法:

字符串有多种其他方法用于测试和操作文本数据。这是一个小方法示例:

小号。Endswith ( suffix )      # 检查字符串是否以后缀
s结尾。find ( t ) # 在 s
s中第一次出现 t。index ( t ) # t 在 s
s中第一次出现。isalpha () # 检查字符是否为字母
s . isdigit () # 检查字符是否为数字
s . islower () # 检查字符是否为小写
s . 上层() # 检查字符是否为大写
s . join ( slist ) # 使用 s 作为分隔符
s加入字符串列表。lower () # 转换为小写
s。replace ( old , new ) # 替换文本
s。rfind ( t ) # 从字符串
s 的末尾搜索 t。rindex ( t ) # 从字符串
s 的末尾搜索 t。拆分([delim ]) # 将字符串拆分为子字符串列表
s . startswith ( prefix ) # 检查字符串是否以前缀
s开头。strip () # 去除前导/尾随空格
s。upper () # 转换为大写

3.7字符串可变性

字符串是“不可变的”或只读的。一旦创建,该值就无法更改。

>> > 小号 =  '的Hello World'
>> > 小号[ 1 ] = 'A'
回溯(最 近期 呼叫 最后):
文件 “<标准输入>” ,线 1,在 <模块>
类型错误:'STR' 对象 确实 不 支持 项目 分配
>> >

所有操作字符串数据的操作和方法,总是创建新的字符串。

3.8字符串可变性

使用str()任何值转换为字符串。结果是一个字符串,其中包含与print()语句生成的文本相同的文本。

>> >  x  =  42
>> > str ( x )
'42'
>> >

3.9字节串

一串 8 位字节,通常在低级 I/O 中遇到,写成如下:

data  =  b'Hello World \r \n '

通过在第一个引号前加上一点 b,您可以指定它是一个字节字符串而不是文本字符串。

大多数通常的字符串操作都有效。

len ( data )                          # 13
data [ 0 : 5 ] # b'Hello'
data . 替换( b'Hello' , b'Cruel' ) # b'Cruel World\r\n'

索引有点不同,因为它以整数形式返回字节值。

数据[ 0 ]    # 72('H' 的 ASCII 码)

与文本字符串之间的转换。

文本 = 数据。decode ( 'utf-8' ) # bytes -> text
data = text . 编码( 'utf-8' ) # 文本 -> 字节

所述'utf-8'参数指定的字符编码。其他常见值包括'ascii''latin1'

3.10原始字符串

原始字符串是带有未解释反斜杠的字符串文字。它们通过在初始引号前加上小写的“r”来指定。

>> >  rs  =  r'c:\newdata\test'  # 原始(未解释的反斜杠)
>> > rs
'c: \\ newdata \\ test'

该字符串是包含在其中的文字文本,与键入的完全相同。这在反斜杠具有特殊意义的情况下很有用。例如:文件名、正则表达式等。

3.11f-字符串

带有格式化表达式替换的字符串。

>> > 名称 =  'IBM'
>> > 股 = 100
>> > 价格 = 91.1
>> > 一个 = F” {名称:> 10秒} {股:10D } {价格:10.2f } '
>> > 一个
' IBM 100 91.10'
>> > b = f'Cost = $ {股份*价格:0.2f } '
>> > 乙
'成本 = $9110.00'
>> >

注意:这需要 Python 3.6 或更新版本。

四、列表

介绍列表,这是 Python 用于保存有序值集合的主要类型。

4.1创建列表

使用方括号定义列表文字:

名称 = [ 'Elwood' , 'Jake' , 'Curtis' ]
nums = [ 39 , 38 , 42 , 65 , 111 ]

有时列表是由其他方法创建的。例如,可以使用以下split()方法将字符串拆分为列表:

>> > 行 =  'GOOG,100,490.10'
>> > 行 = 行。拆分( ',' )
>> > 行
[ 'GOOG' , '100' , '490.10' ]
>> >

4.2列出操作

列表可以包含任何类型的项目。添加一个新项目使用append()

名字。append ( 'Murphy' )     # 添加到结尾
名称。insert ( 2 , 'Aretha' ) # 在中间插入

使用+来连接列表:

s  = [ 1 , 2 , 3 ]
t = [ 'a' , 'b' ]
s + t # [1, 2, 3, 'a', 'b']

列表由整数索引。从 0 开始。

姓名 = [ '埃尔伍德'、'杰克'、'柯蒂斯' ]

名称[ 0 ]   # 'Elwood'
名称[ 1 ] # 'Jake'
名称[ 2 ] # 'Curtis'

负指数从最后开始计数。

名称[ - 1 ] # '柯蒂斯'

您可以更改列表中的任何项目。

名字[ 1 ] =  'Joliet Jake'
名字 # ['Elwood', 'Joliet Jake', 'Curtis']

列表的长度。

名称 = [ 'Elwood' , 'Jake' , 'Curtis' ]
len (名称) # 3

成员资格测试 ( innot in)。

“埃尔伍德” 在 名称       #真
“布兰妮 不是 在 名称 #真

复制 ( s * n)。

s  = [ 1 , 2 , 3 ]
s * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3]

4.3列表迭代和搜索

使用for遍历列表内容。

for  name  in  names :
# use name
# eg print(name)
...

这类似于foreach其他编程语言的声明。

要快速找到某物的位置,请使用index()

姓名 = [ 'Elwood' , 'Jake' , 'Curtis' ]
姓名。索引('柯蒂斯') #2

如果元素出现多次,index()将返回第一次出现的索引。

如果未找到该元素,则会引发ValueError异常。

4.4列表删除

您可以通过元素值或索引删除项目:

# 使用值
名称。删除('柯蒂斯') # 使用索引
删除 名称[ 1 ]

移除一个项目不会产生一个洞。其他物品将向下移动以填充空出的空间。如果元素出现多次,remove()则只删除第一次出现。

4.5列表排序

列表可以“就地”排序。

s  = [ 10 , 1 , 7 , 3 ]
s。排序() # [1, 3, 7, 10] # 倒序
s = [ 10 , 1 , 7 , 3 ]
s . sort ( reverse = True ) # [10, 7, 3, 1] # 它适用于任何有序数据
s = [ 'foo' , 'bar' , 'spam' ]
s。sort () # ['bar', 'foo', 'spam']

使用sorted(),如果你想使一个新的列表,而不是:

t  =  sorted ( s )                # s 不变,t 保存排序值

4.6列表和数学

注意:列表不是为数学运算设计的。

>> >  nums  = [ 1 , 2 , 3 , 4 , 5 ]
>> > nums * 2
[ 1 , 2 , 3 , 4 , 5 , 1 , 2 , 3 , 4 , 5 ]
>> > nums + [ 10 , 11 , 12 , 13 , 14 ]
[ 1 , 2 , 3 , 4 , 5 , 10 , 11 , 12 , 13 , 14 ]

具体来说,列表不像在 MATLAB、Octave、R 等中那样表示向量/矩阵。但是,有一些包可以帮助您解决这个问题(例如numpy)。

五、文件管理

大多数程序需要从某处读取输入。本节主要学习文件访问。

5.1文件输入和输出

打开一个文件。

f  =  open ( 'foo.txt' , 'rt' )      # 打开阅读(文本)
g = open ( 'bar.txt' , 'wt' ) # 打开写作(文本)

读取所有数据。

数据 =  f。读()

# 最多只读取 'maxbytes' 个字节
data = f . 读取([ maxbytes ])

写一些文字。

克。写('一些文字')

完成后关闭。

f . 关闭()
g。关闭()

文件应该正确关闭,这是一个容易忘记的步骤。因此,首选方法是使用这样的with语句。

with  open ( filename , 'rt' ) as  file :
# 使用文件`file`
...
# 无需显式关闭
...语句

当控制离开缩进的代码块时,这会自动关闭文件。

5.2读取文件数据的常用习语

一次性读取整个文件作为字符串。

以 open ( 'foo.txt' , 'rt' )作为 文件:
data = file。read ()
# `data` 是一个字符串,包含 `foo.txt` 中的所有文本

通过迭代逐行读取文件。

with  open ( filename , 'rt' ) as  file :
for line in file :
# 处理该行

5.3写入文件的常用习语

写入字符串数据。

使用 open ( 'outfile' , 'wt' )作为 out :
out。写('你好世界\n ')
...

重定向打印功能。

使用 open ( 'outfile' , 'wt' )作为 out:
print ( 'Hello World' , file = out )
...

六、功能

随着您的程序开始变大,您将需要组织起来。简要介绍函数和库模块。还引入了异常的错误处理。

6.1自定义函数

对要重用的代码使用函数。下面是一个函数定义:

def  sumcount ( n ):
'''
返回前 n 个整数的总和
'''
total = 0
而 n > 0 :
total += n
n -= 1
return total

调用一个函数。

a  =  sumcount ( 100 )

函数是执行某些任务并返回结果的一系列语句。在return需要的关键字明确指定函数的返回值。

6.2库函数

Python 附带了一个大型标准库。库模块使用import. 例如:

导入 数学
x = 数学。sqrt ( 10 )导入urllib。请求u = urllib。请求。urlopen ( 'http://www.python.org/' )
数据= u。读()

稍后我们将更详细地介绍库和模块。

6.3错误和异常

函数将错误报告为异常。异常会导致函数中止,如果未经处理,可能会导致整个程序停止。

在你的 python REPL 中试试这个。

>> >  INT('N / A' )
回溯(最 近期 呼叫 最后):
文件 “<标准输入>” ,线 1,在 <模块>
ValueError异常:无效 字面 为 INT()与 碱 10:'N / A'
>> >

出于调试目的,该消息描述了发生的情况、错误发生的位置以及显示导致失败的其他函数调用的回溯。

6.4捕获和处理异常

异常可以被捕获和处理。

要捕获,请使用该try - except语句。

用于 线 在 ˚F:
字段 = 线。split ()
尝试:
shares = int ( fields [ 1 ])
除了 ValueError:
print ( "Couldn't parse" , line )
...

该名称ValueError必须与您尝试捕获的错误类型相匹配。

根据正在执行的操作,通常很难准确地提前知道可能发生哪些类型的错误。不管是好是坏,异常处理通常是在程序意外崩溃后添加的(即,“哦,我们忘记捕获那个错误。我们应该处理它!”)。

6.5引发异常

要引发异常,请使用该raise语句。

提高 RuntimeError(“这是一个乱哄哄”)

这将导致程序因异常回溯而中止。除非被try-except方块抓住。

% python3 foo.py
Traceback(最近一次调用最后一次):
文件“ foo.py ”,第 21 行,在 < module > 中
raise RuntimeError( “ What a kerfuffle ” )
RuntimeError: What a kerfuffle

感谢观看,关注我持续为您分享干货内容,你的收藏、评论、点赞就是对我最大的支持! 需要领取我之前学习资料的可以私信我,告诉我你具体需要的资料。

x < y      Less than
x <= y Less than or equal
x > y Greater than
x >= y Greater than or equal
x == y Equal to
x != y Not equal to

您可以使用形成更复杂的布尔表达式

andor,not

这里有一些例子:

如果 b  >=  a 和 b  <=  c:
打印('b 在 a 和 c' 之间) 如果 不是(b < a 或 b > c):
打印('b 仍然在 a 和 c' 之间)

2.5转换数字

类型名称可用于转换值:

a  =  int ( x )     # 将 x 转换为整数
b = float ( x ) # 将 x 转换为浮点数

试试看。

>> >  a  =  3.14159
>> > int ( a )
3
>> > b = '3.14159' # 它也适用于包含数字的字符串
>> > float ( b )
3.14159
>> >

三、字符串

介绍处理文本的方法。

3.1表示文字文本

字符串文字是用引号写在程序中的。

# 单引号
a = 'Yeah but no but yes but...' # 双引号
b = "计算机说不" # 三重引号
c = '''
看着我的眼睛,看着我的眼睛,眼睛,眼睛,眼睛,
不要在眼睛周围
,不要在眼睛周围,
看着我的眼睛,你在下。
'''

通常字符串只能跨越一行。三重引号捕获包含在多行中的所有文本,包括所有格式。

使用单 (’) 和双 (") 引号之间没有区别。但是,必须使用用于开始字符串的相同类型的引号来终止它。

3.2字符串转义码

转义码用于表示控制字符和无法直接在键盘上轻松输入的字符。以下是一些常见的转义码:

'\n'      Line feed
'\r' Carriage return
'\t' Tab
'\'' Literal single quote
'\"' Literal double quote
'\\' Literal backslash

3.3字符串表示

字符串中的每个字符在内部存储为所谓的 Unicode“代码点”,它是一个整数。您可以使用以下转义序列指定确切的代码点值:

a = ’ \xf1 ’ # a = ‘ñ’
b = ’ \u2200 ’ # b = ‘∀’
c = ’ \U0001D122 ’ # c = ‘’
d = ‘\N{FOR ALL}’ # d = ’ ∀’
在Unicode字符数据库是所有可用的字符代码的参考。

3.4字符串索引

字符串就像访问单个字符的数组一样工作。您使用从 0 开始的整数索引。负索引指定相对于字符串末尾的位置。

a  =  'Hello world'
b = a [ 0 ] # 'H'
c = a [ 4 ] # 'o'
d = a [ - 1 ] # 'd'(字符串结束)

您还可以切片或选择指定索引范围的子字符串:

d  =  a [: 5 ]      # 'Hello'
e = a [ 6 :] # 'world'
f = a [ 3 : 8 ] # 'lo wo'
g = a [ - 5 :] # 'world'

不包括结束索引处的字符。缺少索引假定字符串的开头或结尾。

3.5字符串操作

串联、长度、成员资格和复制。

# 连接 (+)
a = 'Hello' + 'World' # 'HelloWorld'
b = 'Say ' + a # 'Say HelloWorld' # 长度 (len)
s = '你好'
len ( s ) # 5 # 成员资格测试 (`in`, `not in`)
t = 'e' in s # True
f = 'x' in s # False
g = 'hi' not in s # True # 复制 (s * n)
rep = s * 5 # 'HelloHelloHelloHelloHello'

3.6字符串方法

字符串具有对字符串数据执行各种操作的方法。

示例:剥离任何前导/尾随空格。

s  =  '你好'
t = s。strip () #'你好'

示例:大小写转换。

s  =  '你好'
l = s。下() # '你好'
u = s . 上() #'你好'

示例:替换文本。

s  =  '你好世界'
t = s。replace ( 'Hello' , 'Hallo' ) # '你好世界'

更多字符串方法:

字符串有多种其他方法用于测试和操作文本数据。这是一个小方法示例:

小号。Endswith ( suffix )      # 检查字符串是否以后缀
s结尾。find ( t ) # 在 s
s中第一次出现 t。index ( t ) # t 在 s
s中第一次出现。isalpha () # 检查字符是否为字母
s . isdigit () # 检查字符是否为数字
s . islower () # 检查字符是否为小写
s . 上层() # 检查字符是否为大写
s . join ( slist ) # 使用 s 作为分隔符
s加入字符串列表。lower () # 转换为小写
s。replace ( old , new ) # 替换文本
s。rfind ( t ) # 从字符串
s 的末尾搜索 t。rindex ( t ) # 从字符串
s 的末尾搜索 t。拆分([delim ]) # 将字符串拆分为子字符串列表
s . startswith ( prefix ) # 检查字符串是否以前缀
s开头。strip () # 去除前导/尾随空格
s。upper () # 转换为大写

3.7字符串可变性

字符串是“不可变的”或只读的。一旦创建,该值就无法更改。

>> > 小号 =  '的Hello World'
>> > 小号[ 1 ] = 'A'
回溯(最 近期 呼叫 最后):
文件 “<标准输入>” ,线 1,在 <模块>
类型错误:'STR' 对象 确实 不 支持 项目 分配
>> >

所有操作字符串数据的操作和方法,总是创建新的字符串。

3.8字符串可变性

使用str()任何值转换为字符串。结果是一个字符串,其中包含与print()语句生成的文本相同的文本。

>> >  x  =  42
>> > str ( x )
'42'
>> >

3.9字节串

一串 8 位字节,通常在低级 I/O 中遇到,写成如下:

data  =  b'Hello World \r \n '

通过在第一个引号前加上一点 b,您可以指定它是一个字节字符串而不是文本字符串。

大多数通常的字符串操作都有效。

len ( data )                          # 13
data [ 0 : 5 ] # b'Hello'
data . 替换( b'Hello' , b'Cruel' ) # b'Cruel World\r\n'

索引有点不同,因为它以整数形式返回字节值。

数据[ 0 ]    # 72('H' 的 ASCII 码)

与文本字符串之间的转换。

文本 = 数据。decode ( 'utf-8' ) # bytes -> text
data = text . 编码( 'utf-8' ) # 文本 -> 字节

所述'utf-8'参数指定的字符编码。其他常见值包括'ascii''latin1'

3.10原始字符串

原始字符串是带有未解释反斜杠的字符串文字。它们通过在初始引号前加上小写的“r”来指定。

>> >  rs  =  r'c:\newdata\test'  # 原始(未解释的反斜杠)
>> > rs
'c: \\ newdata \\ test'

该字符串是包含在其中的文字文本,与键入的完全相同。这在反斜杠具有特殊意义的情况下很有用。例如:文件名、正则表达式等。

3.11f-字符串

带有格式化表达式替换的字符串。

>> > 名称 =  'IBM'
>> > 股 = 100
>> > 价格 = 91.1
>> > 一个 = F” {名称:> 10秒} {股:10D } {价格:10.2f } '
>> > 一个
' IBM 100 91.10'
>> > b = f'Cost = $ {股份*价格:0.2f } '
>> > 乙
'成本 = $9110.00'
>> >

注意:这需要 Python 3.6 或更新版本。

四、列表

介绍列表,这是 Python 用于保存有序值集合的主要类型。

4.1创建列表

使用方括号定义列表文字:

名称 = [ 'Elwood' , 'Jake' , 'Curtis' ]
nums = [ 39 , 38 , 42 , 65 , 111 ]

有时列表是由其他方法创建的。例如,可以使用以下split()方法将字符串拆分为列表:

>> > 行 =  'GOOG,100,490.10'
>> > 行 = 行。拆分( ',' )
>> > 行
[ 'GOOG' , '100' , '490.10' ]
>> >

4.2列出操作

列表可以包含任何类型的项目。添加一个新项目使用append()

名字。append ( 'Murphy' )     # 添加到结尾
名称。insert ( 2 , 'Aretha' ) # 在中间插入

使用+来连接列表:

s  = [ 1 , 2 , 3 ]
t = [ 'a' , 'b' ]
s + t # [1, 2, 3, 'a', 'b']

列表由整数索引。从 0 开始。

姓名 = [ '埃尔伍德'、'杰克'、'柯蒂斯' ]

名称[ 0 ]   # 'Elwood'
名称[ 1 ] # 'Jake'
名称[ 2 ] # 'Curtis'

负指数从最后开始计数。

名称[ - 1 ] # '柯蒂斯'

您可以更改列表中的任何项目。

名字[ 1 ] =  'Joliet Jake'
名字 # ['Elwood', 'Joliet Jake', 'Curtis']

列表的长度。

名称 = [ 'Elwood' , 'Jake' , 'Curtis' ]
len (名称) # 3

成员资格测试 ( innot in)。

“埃尔伍德” 在 名称       #真
“布兰妮 不是 在 名称 #真

复制 ( s * n)。

s  = [ 1 , 2 , 3 ]
s * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3]

4.3列表迭代和搜索

使用for遍历列表内容。

for  name  in  names :
# use name
# eg print(name)
...

这类似于foreach其他编程语言的声明。

要快速找到某物的位置,请使用index()

姓名 = [ 'Elwood' , 'Jake' , 'Curtis' ]
姓名。索引('柯蒂斯') #2

如果元素出现多次,index()将返回第一次出现的索引。

如果未找到该元素,则会引发ValueError异常。

4.4列表删除

您可以通过元素值或索引删除项目:

# 使用值
名称。删除('柯蒂斯') # 使用索引
删除 名称[ 1 ]

移除一个项目不会产生一个洞。其他物品将向下移动以填充空出的空间。如果元素出现多次,remove()则只删除第一次出现。

4.5列表排序

列表可以“就地”排序。

s  = [ 10 , 1 , 7 , 3 ]
s。排序() # [1, 3, 7, 10] # 倒序
s = [ 10 , 1 , 7 , 3 ]
s . sort ( reverse = True ) # [10, 7, 3, 1] # 它适用于任何有序数据
s = [ 'foo' , 'bar' , 'spam' ]
s。sort () # ['bar', 'foo', 'spam']

使用sorted(),如果你想使一个新的列表,而不是:

t  =  sorted ( s )                # s 不变,t 保存排序值

4.6列表和数学

注意:列表不是为数学运算设计的。

>> >  nums  = [ 1 , 2 , 3 , 4 , 5 ]
>> > nums * 2
[ 1 , 2 , 3 , 4 , 5 , 1 , 2 , 3 , 4 , 5 ]
>> > nums + [ 10 , 11 , 12 , 13 , 14 ]
[ 1 , 2 , 3 , 4 , 5 , 10 , 11 , 12 , 13 , 14 ]

具体来说,列表不像在 MATLAB、Octave、R 等中那样表示向量/矩阵。但是,有一些包可以帮助您解决这个问题(例如numpy)。

五、文件管理

大多数程序需要从某处读取输入。本节主要学习文件访问。

5.1文件输入和输出

打开一个文件。

f  =  open ( 'foo.txt' , 'rt' )      # 打开阅读(文本)
g = open ( 'bar.txt' , 'wt' ) # 打开写作(文本)

读取所有数据。

数据 =  f。读()

# 最多只读取 'maxbytes' 个字节
data = f . 读取([ maxbytes ])

写一些文字。

克。写('一些文字')

完成后关闭。

f . 关闭()
g。关闭()

文件应该正确关闭,这是一个容易忘记的步骤。因此,首选方法是使用这样的with语句。

with  open ( filename , 'rt' ) as  file :
# 使用文件`file`
...
# 无需显式关闭
...语句

当控制离开缩进的代码块时,这会自动关闭文件。

5.2读取文件数据的常用习语

一次性读取整个文件作为字符串。

以 open ( 'foo.txt' , 'rt' )作为 文件:
data = file。read ()
# `data` 是一个字符串,包含 `foo.txt` 中的所有文本

通过迭代逐行读取文件。

with  open ( filename , 'rt' ) as  file :
for line in file :
# 处理该行

5.3写入文件的常用习语

写入字符串数据。

使用 open ( 'outfile' , 'wt' )作为 out :
out。写('你好世界\n ')
...

重定向打印功能。

使用 open ( 'outfile' , 'wt' )作为 out:
print ( 'Hello World' , file = out )
...

六、功能

随着您的程序开始变大,您将需要组织起来。简要介绍函数和库模块。还引入了异常的错误处理。

6.1自定义函数

对要重用的代码使用函数。下面是一个函数定义:

def  sumcount ( n ):
'''
返回前 n 个整数的总和
'''
total = 0
而 n > 0 :
total += n
n -= 1
return total

调用一个函数。

a  =  sumcount ( 100 )

函数是执行某些任务并返回结果的一系列语句。在return需要的关键字明确指定函数的返回值。

6.2库函数

Python 附带了一个大型标准库。库模块使用import. 例如:

导入 数学
x = 数学。sqrt ( 10 )导入urllib。请求u = urllib。请求。urlopen ( 'http://www.python.org/' )
数据= u。读()

稍后我们将更详细地介绍库和模块。

6.3错误和异常

函数将错误报告为异常。异常会导致函数中止,如果未经处理,可能会导致整个程序停止。

在你的 python REPL 中试试这个。

>> >  INT('N / A' )
回溯(最 近期 呼叫 最后):
文件 “<标准输入>” ,线 1,在 <模块>
ValueError异常:无效 字面 为 INT()与 碱 10:'N / A'
>> >

出于调试目的,该消息描述了发生的情况、错误发生的位置以及显示导致失败的其他函数调用的回溯。

6.4捕获和处理异常

异常可以被捕获和处理。

要捕获,请使用该try - except语句。

用于 线 在 ˚F:
字段 = 线。split ()
尝试:
shares = int ( fields [ 1 ])
除了 ValueError:
print ( "Couldn't parse" , line )
...

该名称ValueError必须与您尝试捕获的错误类型相匹配。

根据正在执行的操作,通常很难准确地提前知道可能发生哪些类型的错误。不管是好是坏,异常处理通常是在程序意外崩溃后添加的(即,“哦,我们忘记捕获那个错误。我们应该处理它!”)。

6.5引发异常

要引发异常,请使用该raise语句。

提高 RuntimeError(“这是一个乱哄哄”)

这将导致程序因异常回溯而中止。除非被try-except方块抓住。

% python3 foo.py
Traceback(最近一次调用最后一次):
文件“ foo.py ”,第 21 行,在 < module > 中
raise RuntimeError( “ What a kerfuffle ” )
RuntimeError: What a kerfuffle

感谢观看,关注我持续为您分享干货内容,你的收藏、评论、点赞就是对我最大的支持! 需要领取我之前学习资料的可以私信我,告诉我你具体需要的资料。

上一篇:前端框架Easyui学习积累


下一篇:eclipse关掉jsp,js的语法验证