Python3学习笔记之Python基础

Python基础

参考链接:廖雪峰的官方网站

  • Python基础
    • 数据类型和变量
    • 运算符
    • 字符串和编码
    • 使用list和tuple
    • 条件判断
    • 循环
    • 使用dict和set

数据类型和变量

  • r''表示''内部的字符串默认不转义:
>>> print('\\\t\\')
\       \
>>> print(r'\\\t\\')
\\\t\\
  • '''...'''来表示多行内容:
>>> print('''line1 ... line2 ... line3''')
line1
line2
line3

但如果是写在.py文件中的话,就没有…提示符了:

print('''line1 line2 line3''')
  • ''' '''也可以用来表示多行注释
  • Python中的布尔值为TrueFalse,空值用None表示,空的str, tuple, list, dict都是False
  • Python是动态语言,即变量类型是不固定的,可以把不同类型的值赋给它
  • Python中用全部大写的变量名表示常量:PI = 3.14159265359,但其实这个值还是可以被修改的
  • Python中a = 'ABC'表示内存中的变量a指向内存中的常量'ABC'
  • Python中判断浮点数相等:
import sys
def equal_float(a, b):
    return abs(a - b) <= sys.float_info.epsilon
    #最小浮点数间隔
print(equal_float(1.0, 1.0))

True
  • 对于浮点数,round()表示四舍五入,ceil()表示向上取整,floor()表示向下取整
import math

print(round(2.4))
print(round(2.6))
print(math.ceil(2.2))
print(math.floor(2.9))

2
3
3
2

运算符

  • +,-,*,%与c++同
  • / 结果是浮点数
>>> 6 / 5
1.2
  • //是整数除法
>>> 6 // 5
1
  • x ** y 求x的y次幂
>>> 2 ** 3
8
  • 逻辑运算符and or not

字符串和编码

  • ASCII编码是1个字节,而Unicode编码通常是2个字节。
  • 把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001
  • UTF-8编码是可变长的Unicode编码,它把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节
  • Python3使用的是Unicode编码
  • 可以使用ordchr函数来进行字符与编码之间的转换,python2.x中默认支持Ascii码,python3.x中默认支持Unicode编码
Python2.x
>>> chr(65)  
'A'  

>>> ord('A')  
65  

>>> unichr(20013)  
u'\u4e2d'  

>>> ord(u'\u4e2d')  
20013  

>>> ord('中')  
Traceback (most recent call last):  
  File "", line 1, in   
TypeError: ord() expected a character, but string of length 2 found  

>>> chr(20013)  
Traceback (most recent call last):  
  File "", line 1, in   
ValueError: chr() arg not in range(256) 
Python3.x
>>> chr(65)  
'A'  

>>> ord('A')  
65  

>>> chr(20013)  
'中'  

>>> ord('中')  
20013  

>>> ord('\u4e2d')  
20013  
  • python中输出格式化方式与C语言中类似,使用%来实现:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
  • 最常用UTF-8编码对strbytes进行转换:
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
  • 字符串不可修改:
a = "1234"
print(a[2])
a[2] = "3"  #error
  • 可以用in, not in来判断是否为子串:
a = "Hello"
print("el" in a)
b = "Python"
print("th" not in b)

True
False

使用list和tuple

  • Python中list和C++、Java中的数组使用方法类似,都用索引来访问,但下标可以是负数,-1表示访问倒数第一个元素:
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
>>> classmates[1]
'Bob'
>>> classmates[-1]
'Tracy'
  • 使用append来向list末尾增加元素,使用insert来向指定位置插入元素,使用pop来删除list元素(使用pop会输出被删除的元素),默认删除末尾元素,也可以指定位置:
>>> classmates.pop()
'Tracy'
  • list中的元素可以是不同类型的,也可以是另外一个list:
>>> L = ['Apple', 123, True]
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
  • tuple与list很类似,但tuple一经初始化就无法修改,tuple由数个逗号分隔的值组成,前后可加括号,定义空元组必须有括号:
>>> classmates = 'Michael', 'Bob', 'Tracy'
  • 只有一个元素的tuple定义必须要加,,否则会把()理解为数学符号:
>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
  • tuple所谓的“不变”是“指向“不变,即每个元素指向一个对象,就不能指向其他对象,但这个对象本身是可变的:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
  • listtuple可以使用乘法操作,但dict不行:
li = [1,]
li = li * 3
print(li)       #[1, 1, 1]

t = (1, 2)
t = t * 3
print(t)        #(1, 2, 1, 2, 1, 2)

d = {"1":1, "2":2}
d = d * 3       #TypeError: unsupported operand type(s) for *: 'dict' and 'int'
  • 元组的连接会生成一个新的元组,列表则是在原来对象的基础上增加:
>>> a = 1, 2, 3
>>> b = a
>>> b
(1, 2, 3)
>>> a += 4,
>>> b
(1, 2, 3)
>>> a
(1, 2, 3, 4)

>>> a = [1, 2, 3]
>>> b = a
>>> a += [4,]
>>> b
[1, 2, 3, 4]
  • 用列表来定义二维数组:
>>> array = [1, 2, 3]
>>> m = [array] * 3
>>> m
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> m[0][1] = 4
>>> m
[[1, 4, 3], [1, 4, 3], [1, 4, 3]]
#上面这种方法得到是并不是二维数组,m[0],m[1],m[2]指向相同的一维数组array

#正确做法
>>> m = [[i * 3 + j for j in range(3)] for i in range(3)]
>>> m
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]

条件判断

  • Python中条件判断使用ifelifelseelifelse if的缩写。
age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')
  • 使用ifelifelse条件判断语句时,除了要注意在语句末尾加上冒号,还要注意另起一行的缩进,Python中用缩进来表示代码块

循环

  • for…in循环可以用来遍历list和tuple中的元素(同样要注意缩进):
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)
  • python3中可以使用for else语句,当for语句正常结束,就会执行else语句;否则(遇到break)就不执行else语句
sites = ["Baidu", "Google","IBM","Taobao"] #list
for site in sites:
    if site == "IBM":
        print("OK")
        break
    print("site: " + site)
else:
    print("No break")
print("Done!")

site: Baidu
site: Google
OK
Done!
  • while循环与C++和Java中类似
  • break和continue的含义与C++和Java中类似

使用dict和set

  • Python中的dict就相当于其他语言中的map,是键-值对的存储方式
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
  • key用于计算出值在内存中的存放地址,一个key只能对应一个value,key不存在时会报错
  • get方法可用于判断元素是否存在于dict中,存在会返回1,不存在则会返回None或者指定的值
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
  • pop(key)方法可以删除对应的key和value
  • dict的key必须是不可变对象,字符串和整数是不可变对象,而list则不是,因此list不能作为key
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'list'
  • tuple是不可变对象,因此(1, 2, 3)是可以作为dict的key的,但(1, [2, 3])则不能作为key
  • 字典的格式化输出:
>>> phonebook = {'Alice': 2341, 'Beth': 9102, 'Cecil': 3258}
>>> "Cecil's phone number is %(Cecil)s." % phonebook
"Cecil's phone number is 3258."
>>> "Cecil's phone number is %(Cecil)d." % phonebook
"Cecil's phone number is 3258."
>>> "Cecil's phone number is %(Cecil)f." % phonebook
"Cecil's phone number is 3258.000000."
  • 字典的keys(), items(), values()分别可以获得字典的键、键-值对、值

  • set相当于C++的unordered_set,是哈希表,元素不可重复且必须可哈希

  • set是key的集合,不能有重复的key,它与dict唯一的区别就是没有存value
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
  • addremove可分别用于增加和删除set中的key
  • 关于不可变对象,如果对str进行replace操作,结果如下:
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'

替换成功了,但a变量指向的值仍是'abc'a.replace('a','A')语句是作用在字符串对象'abc'的,但实际上并没有修改它的值,而是新建了一个字符串对象'Abc'并返回。
这里写图片描述
所以,对于不可变对象,调用对象自身的任何方法都不会改变对象本身,而是会产生的新的对象并返回

你可能感兴趣的:(Python3学习笔记)