python 命令行模式启动python交互模式
exit() 命令行模式退出python交互模式
python 交互模式:输入命令,立即解释输出结果
命令行模式:运行文件,python .py
python文件直接在文本编辑器写代码,没有头文件的存在,导入文件倒是可以有的
输入,输出 input() print() ——》 a=input("请输入数字:") print('字符串','逗号','分隔','空格') input()
和print()
是在命令行下面最基本的输入和输出
Python使用缩进来组织代码块,遵守习惯使用4个空格的缩进。每一行是一个语句,当语句以冒号:
结尾时,缩进的语句视为代码块。注释以#
开头,可以是任意内容,解释器会忽略掉注释。Tab(制表符,用于对其字符),空格(可见字符)
Python程序是大小写敏感的
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1
,100
,-8080
,0
,等等。计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x
前缀和0-9,a-f表示,例如:0xff00
,0xa5b4c3d2
,等等。1.23x109就是1.23e9
,或者12.3e8
,0.000012可以写成1.2e-5
,等等。python对整数和浮点数没有大小限制。
字符串是以单引号'
或双引号"
括起来的任意文本,比如'abc'
,"xyz"
等等。请注意,''
或""
本身只是一种表示方式,不是字符串的一部分,
如果字符串内部既包含'
又包含"
怎么办?可以用转义字符\
来标识,比如:'I\'m \"OK\"!'。
\n
表示换行,\t
表示制表符,字符\
本身也要转义,所以\\
表示的字符就是\
Python允许用'''字符串分行写所见即所得'''
的格式表示多行内容 两边都是三个单引号
print('''line1
line1
line2 输出
line2
line3''')
line3
r‘字符串’ 或者 r"字符串" 会在 r'''字符串''' r写在字符串前面的作用都是提示字符串内所有字符直接显示,不再转义了。如: r'我\\\\们' 输出 我\\\\们 否则 '我\\\\们' 输出 我\\们
print(r'''Hello,\n Hello,\n
world''') 输出 world
在Python中,可以直接用True
、False
表示布尔值(请注意大小写) 例如,print(3>2) 输出 True。布尔值可以用and
、or
和not
运算。True and True , False or False , not True。
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_
的组合,且不能用数字开头。在Python中,等号=
是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言。
在Python中,通常用全部大写的变量名表示常量,例如PI = 3.14159265359,
但事实上PI
仍然是一个变量,Python根本没有任何机制保证PI
不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI
的值,也没人能拦住你。
最后解释一下整数的除法为什么也是精确的。在Python中,有两种除法,一种除法是/,
/
除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
>>> 10 / 3
3.3333333333333335
>>> 9 / 3
3.0
还有一种除法是//
,称为地板除,两个整数的除法仍然是整数:
>>> 10 // 3
3
你没有看错,整数的地板除//
永远是整数,即使除不尽。要做精确的除法,使用/
就可以。因为//
除法只取结果的整数部分,所以Python还提供一个余数运算,可以得到两个整数相除的余数:
>>> 10 % 3
1
无论整数做//
除法还是取余数,结果永远是整数,所以,整数运算结果永远是精确的。
字符串和编码
通用,在操作系统中的叫法。编码的名称与类型:
ASCII编码是1个字节,而Unicode编码通常是2个字节,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8
编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
现在计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
保存到硬盘或者传输的时候,需要文件小一些,所以转换成UTF-8.
在python内部,使用unicode编码的叫做str类型,使用ascii编码或者utf-8编码的叫做bytes类型。注意区分python的类型与具体编码类型的区别,不要混为一谈,编码是编码,类型是类型,一个是底层的,一个是表层的。bytes只是一个类型,具体底层使用哪种编码格式需要具体指定。
由于Python的字符串类型是str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str
变为以字节为单位的bytes类型
。转换为bytes后
的每个字符都只占用一个字节。
python对bytes
类型的数据用带b
前缀的单引号或双引号表示:
x = b'ABC'
str类型的字符串转换为相应的bytes类型的字符串:以Unicode表示的str
通过encode()
方法可以编码为指定的bytes
,例如:
>>> 'ABC'.encode('ascii') (实际上英文使用的是ASCII编码) 或者 'ABC'.encode('utf-8') utf-8等同于UTF-8(一下都是)
b'ABC' 一样的结果,因为在ASCII编码中和utf-8编码中,一个英文字母都占用一个字节
>>> '中文'.encode('utf-8') (实际上中文使用的是utf-8编码,一个汉字占用3个字节) 不能使用ASCII编码因为超出了ASCII规定的编码范围。
b'\xe4\xb8\xad\xe6\x96\x87' bytes有6个字符,占用6个字节
把bytes
变为str
,就需要用decode()
方法:
>>> b'ABC'.decode('ascii') b'ABC'.decode('utf-8') 结果一样
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') 用什么加锁就用什么解锁喽~
'中文'
bytes转为str时候,如果bytes
中只有一小部分无效的字节,可以传入errors='ignore'
忽略错误的字节:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
在操作字符串时,我们经常遇到str
和bytes
的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str
和bytes
进行转换。英文中文都使用utf-8,encode(),decode()的选择。
把文本编辑器设置为utf-8without BOM格式保证了python源代码保存时是utf-8编码,在源文件前添加两行注释保证了读取时是utf-8编码:
由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。申明了UTF-8编码并不意味着你的.py
文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码。
对于单个字符的编码,Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
如果知道字符的整数编码,还可以用十六进制这么写str
:
>>> '\u4e2d\u6587'
'中文'
要计算str
包含多少个字符,可以用len()
函数:
>>> len('ABC')
3
>>> len('中文')
2
len()
函数计算的是str
的字符数,如果换成bytes
,len()
函数就计算字节数:
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
在Python中,采用的格式化方式和C语言是一致的,用%
实现,%
运算符就是用来格式化字符串的。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?
,括号可以省略。
print('hi,%s'%'李梅') 红色%前面的是要输出的内容,里面的%s、\%d、%..的是占位符,用于替换的值位于红色%号的后面
'hi,%s,你有%d元'%('李梅',7000) 多个值的话,红色百分号后面的值用括号括起来,顺序对应就好。
常见的占位符有:
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
如果你不太确定应该用什么,%s
永远起作用,它会把任何数据类型转换为字符串。
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)
print('%4.2f' % 13.1415926)
输出
3-01
3.14
13.14
format()
另一种格式化字符串的方法是使用字符串的format()
方法,它会用传入的参数依次替换字符串内的占位符{0}
、{1}
……,不过这种方式写起来比%要麻烦得多:
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'
小结
Python 3的字符串使用Unicode,直接支持多语言。
当str
和bytes
互相转换时,需要指定编码。最常用的编码是UTF-8
。Python当然也支持其他编码方式,比如把Unicode编码成GB2312
:
>>> '中文'.encode('gb2312')
b'\xd6\xd0\xce\xc4'
但这种方式纯属自找麻烦,如果没有特殊业务要求,请牢记仅使用UTF-8
编码。