Python基础
#
开头是注释- Python区分大小写
- 注意缩进
:
结尾时候,缩进的语句视为代码块
数据类型和变量
在Python中有的数据类型
整数
Python可以处理任意大小的整数,包括负整数,可以使用十进制,1
,11
,1000
,-8080
,0
也可以用十六进制代表,加前缀ox
,如oxff00
,oxa5b3c3d2a
浮点数
也就是小数。
整数和浮点数在计算机内部存储的方式是不同的,整数永远都是精确的,而浮点数可能存在误差。
字符串
字符串是用单引号'
或者双引号"
括起来的任意文本,但是单引号和双引号本身就作为一个表达方式,不是字符串的一部分,因此如果单引号作为一个字符,可以用双引号将字符串括起来,如果单引号和双引号都使用了,可以使用转义字符\
来表示。如:
'I\'m \"OK\"'
表达的内容就是I'm OK
.
转义字符其他常用用法:
\n
表示换行\t
代表制表符\\
代表\本身
>>> print('I\'m ok.')
I'm ok.
>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\
Python为了简化还允许使用r''
来表示''
内的内容默认不转义:
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
如果有很多换行,Python允许使用'''...'''
格式来表示多行内容:
>>> print('''line1
... line2
... line3''')
line1
line2
line3
上面两个结合使用:
>>> print(r'''line
... line2\\\
... line3''')
line
line2\\\
line3
布尔值
在Python中布尔值只有True
以及False
两种值(注意大小写)。
>>> 3>2
True
>>> 2>3
False
布尔值可以用and
,or
,和not
运算。
空值
None
表示,代表一个特殊的空值,不能理解为0
,0
是一个整数
变量
变量名规则,名字必须大小写英文、数字和_组合,不能数字开头:
a = 1
,a是整数t_007 = 'T_007'
,t_007是一个字符串Answer = True
,Answer是一个布尔值
在Python中=
号是赋值语句,同一变量可以反复赋值,而且可以是不同类型的数据:
>>> a = 123
>>> print(a)
123
>>> a = 'ABC'
>>> print(a)
ABC
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量的时候必须制定变量类型,如果赋值的时候类型不匹配就会报错,例如OC语言了。
理解a = 'ABC'
——执行这句话的时候Python解释器做了两件事情:1.在内存中创建了一个'ABC'
的字符串;2.在内存中创建了名为a
的变量,并把它指向'ABC'
也可以将一个变量a
赋值给另一个变量b
,这个操作实际上是讲变量b
指向变量a
所指向的数据
>>> a = 'ABC'
>>> print(a)
ABC
>>> b = a
>>> print(b)
ABC
>>> a = 'CDE'
>>> print(b)
ABC
常量
常量就是不能改变的变量了,比如常用的数字常量π就是一个常量。在Python中,通常使用全部大写的变量名字来表示常量:
PI = 3.1415926359
可以看得出来Python根本上是没有常量这个概念的,就是说我们定义的PI仍然是一个变量。
补充:
说一下为什么Python中整数的除法是精确的。在Python中除法有两种:一种就是/
:
>>> 10/3
3.3333333333333335
计算结果是浮点数,即使两个整数刚好除尽也是浮点:
>>> 9/3
3.0
还有一种就是地板除//
,两个整数的除法是整数,采用去处余数的方式
>>> 10//3
3
还可以通过%
运算符来求得两个数之间的余数
>>> 10 % 3
1
字符串和编码
字符串编码问题。。。。像之前的一样了,主要是ASCII、Unicode以及UTF-8编码的关系。
Python的字符串
在最新的Python3版本中,字符串是Unicode编码的,所以他支持所终语言:例如
>>> print('包含中文的str')
包含中文的str
对于单个字符编码,Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25555)
'揓'
如果知道字符的整数编码,还可以用十六进制这样写str:
>>> '\u4e2d\u6587'
'中文'
由于Python的字符串类型是str
,在内存中以Unicode表示,一个字符对应多个字节,如果想要在网络上传输,或者保存到磁盘上,就要把str
变为以字节为单位的bytes
。
Python对nytes
类型的数据用带b
前桌的单引号或者双引号表示:
>>> x = b'ADC'
注意区分'ABC'
和b'ABC'
的区别,前者是str
,后者是bytes
每个字符只占用一个字节。
我们还可以通过Unicode表示的str
通过encode()
方法可以编码为指定的bytes
,例如:
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
纯英文的str
可以用ASCII
编码为bytes
,内容是一样的,含有中文的str
同样可以用UTF-8
编码为bytes
。但是如果含有中文的str
无法用ASCII
编码,因为中文的编码范围超过了ASCII
的编码范围,Python会报错。
在bytes
中,无法显示为ASCII字符的字节,用\x##
来显示。
反过来,如果我们从网络上或者磁盘上读取了字节流,那么读取到的数据就是bytes
。要把bytes
变为str
,就要用decode()
方法:
>>> b'ABC'.decode('ASCII')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
要计算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
中,Python
的源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码的时候,就需要制定保存为UTF-8编码,当Python解释器读取到源代码的时候,就会按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env Python3
# -*- coding: utf-8 -*-
第一行注释是告诉Linux/OS X系统,这是一个Python的可执行程序,Windows系统会忽略这个这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
格式化
最后一个问题是如何输出格式化的字符串。我们会经常输出类似亲爱的xxx你好!你xx月的话费是xx,余额是xx
之类的字符串,而xxx的内容都是可变的,所以需要一种渐变的格式化字符串的方式。
>>> 'hello,%s'%'world'
'hello,world'
>>> 'Hi ,%s you have $%d.' % ('Michael',10000)
'Hi ,Michael you have $10000.'
可以看到上面的%
运算符就是用来格式化字符串的。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
就有几个变量或者只对应着,如果只有一个%?
那么括号可以省略。
常见的占位符:
- %d 整数
- %f 浮点数
- %s 字符串
- %x 十六进制整数