1.基本概念
1.1表达式
(1)表达式(类似数学公式),是由数字、运算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合
(2)表达式特点
①表达式⼀般仅仅用于计算⼀些结果,不会对程序产⽣实质性的影响
②如果在交互模式中输⼊⼀个表达式,解释器会自动将表达式的结果输出
1.2语句
(1)⼀个语法上自成体系的单位,它由⼀个词或句法上有关连的⼀组词构成
(2)语句的执行⼀般会对程序产生⼀定的影响,在交互模式中不⼀定会输出语句的执行结果
(3)代码块:执行的话,都会执行,不执行的话,一个也不会执行
1.3程序(program)
程序就是由⼀条⼀条的表达式和⼀条⼀条的语句构成的
1.4函数(function)
(1)函数就是⼀种语句,函数专门用来完成特定的功能
(2)函数形如:xxx()
(3)函数的分类:
①内置函数 : 或者内建函数,就是由语法规定存在的函数,这些函数,包含在编译器的运行库中,程序员不必单独书写代码实现它,只需要调用即可。
②自定义函数 : 由程序员自主创建的函数 。
(4)函数的2个要素
①参数()
②返回值
2.标识符
2.1 关键字(保留字)
python⼀些具有特殊功能的标识符,这就是所谓的关键字,是python已经使用了的,所以不允许开发者自己定义和关键字相同名字的标识符
- 33个保留字
2.2 标识符
(1)开发人员在程序中自定义的⼀些符号和名称。标识符是自己定义的,如变量名、函数名等
(2)组成:由26个英文字母大小写,数字 0-9 ,符号 _ $
(3)标识符的规则:
①标识符中可以包含字母、数字、—,但不能使用数字开头
②不能使用关键字和保留字作为标识符
(4)命名方式
①驼峰命名法
小驼峰式命名法: 第⼀个单词以小写字母开始;第⼆个单词的首字母大写,例如:myName、aDog
大驼峰式命名法: 每⼀个单字的首字母都采用写字母,例如:FirstName、LastName
②下划线命名法
就是用下划线“—”来连接所有的单词,如get-url buuffer-size
3. 基本数据类型
数据类型指的就是变量的值的类型,也就是可以为变量赋哪些值
3.1 数字类型(整数/小数/复数)
-
整数(int) :
所有整数 例如 : a = 1 b = 100 c =999_233_345(科学计数法)
存在溢出 -
浮点数(float) :
所有⼩数 例如 a = 1.2 b=6.660.2/0.1先转换为二进制,算完再转为十进制,所以存在如下误差(不确定尾数)
#数字比较
print(0.1+0.2==0.3)
#False
#使用round函数去掉不确定尾数(round(x,d)函数:四舍五入,奇进偶不进)
print(round(0.1+0.2,1)==0.3)
#True
- 复数(complex(实部,虚部))
①复数类型表示数学中的复数。复数中有一个基本单位元素j,它被定义为j=\sqrt{-1},叫“虚数单位”。含有虚数单位的数被称为复数。
②python语言中,复数可以看作是二元有序实数对(a,b),表示a+bj,a为实部,b为虚部,虚部用后缀“J”或者“j”来表示。(注意:b为1时,1不能省略,即1j表示复数,而j则表示python程序中的一个变量。
③复数中的实部和虚部都是浮点类型,对于复数z可以用z.real和z.imag分别获得它的实数部分和虚数部分。
print((1.23e2+1.57j).real,(1.23e2+1.57j).imag,1.23e2+1.57j.imag)
#123.0 1.57 124.57
3.2 布尔值(bool)和空值
- 布尔值(特殊整型int): 只有2个值⼀个是True(1) ⼀个是False(0)
- 用作布尔表达式(如用作 if 语句中的条件)时,下面的值都将被解释器视为假(共10种): 0 0.0 0j False " " () [] {} set() None
其中None是python关键字,代表空,一般用于初始话操作 - 布尔值 True 和 False 属于类型 bool ,而 bool 与 list 、 str 和 tuple 一样,可用来转换其他的值。
print(1+True)
print(1+False)
3.3 自动类型转换
精度从低到高 bool < int < float < compex
自动类型转换,默认从低精度向高精度进行转化(从低到高)
- bool+int =int
- bool+float=float
4 变量
4.1变量的概念?
(1)变量是计算机内存中的⼀块区域,存储规定范围内的值,值可以改变,通俗的说变量就是给数据起个名字。
(2)变量命名规则:
①变量名由字母、数字、下划线组成,要符合标识符的命名规范
②数字不能开头
③不能使用关键字
注意 : 是两个对象相等和两个对象是同⼀个对象是两个概念
不同于其他一些语言, 使用Python变量前必须给它赋值,因为Python变量没有默认值。
4.2变量的运算
变量的运算就是正常的四则运算 ,需要注意的是在运算过程中含有浮点数,那么它返回的就是⼀个浮点数类型(除法运算时结果都是浮点型)
5 字符串(不可变序列)
5.1 什么是字符串
字符串是由数字、字母、下划线组成的⼀串字符,也是一种序列
①Python中用 ⼀对双引号或者⼀对单引号包裹的内容就是字符串
②单引号或者双引号不能混合使⽤
注:Python没有专门用于表示字符的类型,因此一个字符就是只包含一个元素的字符串。
5.11类str
print(str("Hello,\nworld!"))
#Hello,
#world!
5.12函数repr
print(repr("Hello,\nworld!"))
#'Hello,\nworld!'
5.2 转义字符
转义字符是⼀种特殊的字符常量。转义字符以反斜线"\"开头,后跟⼀个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符
① \t 表示制表符
② \n 表示换行符(New line)
③ \ 表示反斜杠
#输出c:\news
#法一
dos='c:\\news'
print(dos)
#法二
dos=r'c:\news'
print(dos)
④ \表示后面跟着的这个字符就是本身字符的意思,不做其他使用
\ ’ 表示 ’
\ ‘’ 表示 ‘’
⑤\r是回车符(Carriage return)
5.3 长字符串
(1)长字符串又叫做文档字符串,我们使用三重引号来表示⼀个长字符串’’’ ‘’’/’’’’’’ ‘’’’’’
(2)三重引号可以换行,并且会保留字符串中的格式
print('''This is a very long string. It continues here.
And it's not over yet. "Hello, world!"
Still here.''')
注:
常规字符串也可横跨多行。只要在行尾加上反斜杠,反斜杠和换行符将被转义,即被忽略。
例如,如果编写如下代码(各型式效果相同):
#法一
print("Hello, world!")
#法二
print("Hello, \ world!")
#法三
print ('Hello,\
world')
5.4原始字符串
原始字符串(r+字符串)不以特殊方式处理反斜杠,因此在有些情况下很有用。
print(r'C:\nowhere')
#C:\nowhere
print(r'C:\Program Files\fnord\foo\bar\baz\frozz\bozz')
#C:\Program Files\fnord\foo\bar\baz\frozz\bozz
5.5 格式化字符串
5.5.1格式化字符串 (拼串)
s='good'
print('s='+s)
5.5.2格式化字符串(参数传递)
s='good'
print('s=',s)
5.5.3格式化字符串(占位符)
%s 字符串占位
%f 浮点数占位(%.3f 将值的格式设置为包含3位小数的浮点数)
%d 整数占位
name = "Monty Python"
print("Hello, %s." % name)
#'Hello, Monty Python.'
name = "Monty Python"
age = 100
#利用元组(name, age)将待插入的多个变量包在一起
print("Hello, %s. You are %d years old" % (name, age))
#'Hello, Monty Python. You are 100 years old'
5.5.4格式化字符串 (str.format())
5.5.4.1format()方法的基本使用
<模板字符串>.format(<逗号分隔的参数>)
- <模板字符串>:一个由字符串和槽组成的字符串,用来控制字符串和变量的显示效果
name = "Eric"
age = 100
#使用str.format(),字符串中待替换的域使用{}表示
print("Hello, {}. You are {}.".format(name, age))
# 'Hello, Eric. You are 100.'
name = "Eric"
age = 100
#通过索引的方式指定format()中哪一个变量和值应该填入哪一个{}
print("Hello, {1}. You are {0}.".format(age, name))
# 'Hello, Eric. You are 100.'
name = "Eric"
age = 100
#通过指定名称的方式表明format()中哪一个变量和值应该填入哪一个{}
print("Hello, {name}. You are {age}.".format(age=age, name=name))
#'Hello, Eric. You are 100.'
待格式化的信息都来自一个字典时:
person = {
'name': 'Eric', 'age': 100}
"Hello, {name}. You are print({age}.".format(name=person['name'],age=person['age']))
#'Hello, Eric. You are 100.'
person = {
'name': 'Eric', 'age': 100}
#上面的程序还能利用字典拆包**进一步简化
print("Hello, {name}. You are {age}.".format(**person))
#'Hello, Eric. You are 100.'
#在模板字符串中直接输出大括号
print('{1}曰:{
{学而时习之,不亦{0}}}。'.format('说乎','孔子'))
#孔子曰:{学而时习之,不亦说乎}。
5.5.4.2format()方法的格式控制
format()方法的槽除了包括参数序号,还可以包括格式控制信息,语法格式如下:
{<参数序号>:<格式控制标记>}
- 格式控制标记用来控制参数显示时的格式,格式内容如下:
: | <填充> | <对齐> | <宽度> | <,> | <精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | <左对齐 >右对齐 ^居中对齐 | 槽的设定输出宽度 | 数字的千位分割符 | ①浮点数小数部分的精度②字符串的最大输出长度 | ①整数类型b,c,d,o,x,X②浮点数类型e,E,f,% |
5.5.4.2.1显示格式规范
- <填充>:可以修改默认填充字符,填充字符只能有一个
- < 对齐>:指定左对齐、右对齐和居中,可分别使用 < 、 > 和 ^
- < 宽度>:指当前槽的设定输出字符宽度,如果该槽参数实际值比宽度设定值大,则使用参数实际长度;如果该值的实际位数小于指定宽度,则按照对齐指定方式在宽度内对齐,默认以空格字符补充
s='Self-discipline is freedom'
#宽度
print('trust yourself,{:30}'.format(s))
#对齐
print('trust yourself,{:^30}'.format(s))
#填充
print('trust yourself,{:*^30}'.format(s))
'''
trust yourself,Self-discipline is freedom
trust yourself, Self-discipline is freedom
trust yourself,**Self-discipline is freedom**
'''
格式控制标记可以用变量来表示,即用槽来指定所对应的控制标记及数量
#注意用变量来表示格式控制标记时,:前需加0
print('trust yourself,{0:{1}{2}{3}}'.format(s,'*','^',30))
#trust yourself,**Self-discipline is freedom**
5.5.4.2.2数值本身规范
- <,>:数字类型的千位分隔符。
- <.精度>:由小数点(.)开头。对于浮点数,精度表示小数点输出的有效位数。对于字符串,精度表示输出的最大长度。此时小数点可以理解为对数值的有效截断;如果小数点保留长度超过应输出长度,以应输出长度为准。
- <类型>:表示输出整数和浮点数类型的格式规则。
(1)整数类型,输出格式包括如下6种
①b:输出整数的二进制方式;
②c:输出整数对应的Unicode字符;
③d:输出整数的十进制方式;
④o:输出整数的八进制方式;
⑤x:输出整数的小写十六进制方式;
⑥X:输出整数的大写十六进制方式。
(2)浮点数类型,输出格式包括如下4种
①e:输出浮点数对应的小写字母e的指数形式;
②E:输出浮点数对应的大写字母E的指数形式;
③f:输出浮点数的标准浮点形式;
④%:输出浮点数的百分比形式。
s=12345.67890
print('trust yourself,{:*^30,}'.format(s))
print('trust yourself,{:*^30,.2f}'.format(s))
'''
trust yourself,*********12,345.6789**********
trust yourself,**********12,345.68***********
'''
5.5.5格式化字符串(f-string)~~~f+’{变量}’
适用范围:有变量指向
name = "Eric"
age = 100
print(f"Hello, {name}. You are {age}.")
# 'Hello, Eric. You are 100.'
5.6字符串操作符
操作符 | 描述 |
---|---|
x+y | 连接两个字符串x与y |
x*n或n*x | 复制n次字符串x |
x in s | 如果x是s的子串,返回True,否则返回False |
s='trust yourself'+'Self-discipline is freedom'
print(s[0:14]*2)
print('trust' in s)
'''
输出如下结果:
trust yourselftrust yourself
True
'''
5.7字符串处理函数
python提供了如下对字符串处理的内置函数:
函数 | 描述 |
---|---|
len(x) | 返回字符串x的长度 ,也返回其它组合数据类型的元素个数 |
chr(x) | 返回Unicode编码x对应的单字符 |
ord(x) | 返回单字符x表示的Unicode编码 |
bin(x) | 返回整数x对应的二进制数的小写形式字符串 |
oct(x) | 返回整数x对应的八进制数的小写形式字符串 |
hex(x) | 返回整数x对应的十六进制数的小写形式字符串 |
print(chr(0x025b),chr(0x2708),chr(0x00A5),chr(0x266B))
#ɛ ✈ ¥ ♫
5.8字符串处理方法
- “方法”是程序设计中的一个专有名词,属于面向对象程序设计领域。在python解释器内部,所有数据类型都采用面向对象方式实现,因此大部分数据类型都有一些处理方法。
- 方法也是一个函数,只是调用方式不同。函数采用func(x)方式调用,而方法则采用<a>.func(x)形式调用即A.B()形式。
(1)center(字符串居中)
方法 center 通过在两边添加填充字符(默认为空格)字符串居中。
#str.center(width,fillchar)
print("The Middle by Jimmy Eat World".center(39))
#' The Middle by Jimmy Eat World '
print("The Middle by Jimmy Eat World".center(39, "*"))
#'*****The Middle by Jimmy Eat World*****'
附: ljust 、 rjust 和 zfill 。
(2)find(子串索引)
方法 find 在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回 -1 。
print('With a moo-moo here, and a moo-moo there'.find('moo'))
#7
title = "Monty Python's Flying Circus"
print(title.find('Python