Python基础入门-查缺补漏(实用教程集)
本篇文章是针对之前写的Python基础入门系列文章中的内容查缺补漏。当然,你也可以通过点击下面的链接来了解更多Python基础知识!不得不说的是我写的Python文章可能不是最好的,但是一定是最用心的,同样,我的水平也有限。我想对于任何一个想入门学习Python的同学,网上Python的教程会有很多,大家可以随意自由学习。所以,本篇文章也是写给那些有需要的同学。希望大家可以在Python的世界里,发挥光芒!
第十五章:Python基础入门-unittest单元测试框架解析
第十六章:Python基础入门-IF__NAME__=="__MAIN__":解析
差缺补漏篇
除法(divmod:内建函数)
>>> divmod(5,2)
(2, 1)
>>> divmod(9,2)
(4, 1)
>>> divmod(5.0,2)
(2.0, 1.0)
四舍五入(round内置函数)
>>> round(1,2)
1.0
>>> round(1.222,3) #四舍五入 保留3位小数
1.222
>>> round(1.234567,3)
1.235
>>> round(1,2) #四舍五入 保留2位小数 但是只有一位
1.0
>>> round(1.56368,3)
1.564
>>>
字符串用法(index内置方法)
>>> demo = 'hello'
>>> demo.index('e') #存在,即返回索引位
1
>>> demo.index('r') #不存在,就报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> demo.index('o')
4
>>> demo = 'helleo'
>>> demo.index('e')
1
字符串的strip() 、lstrip()、rstrip() 用法
>>> demo = ' hello'
>>> demo.lstrip() #去掉左边空格
'hello'
>>> demo = 'hello '
>>> demo.rstrip() #去掉右边空格
'hello'
>>> demo = ' hello '
>>> demo.strip() #去掉两边空格
'hello'
>>>
字符串的upper、lower、capitalize、isupper、islower、istitle用法
>>> a = "qiwsir,Python"
>>> a.upper() # 将小写字母完全变成大写字母
'QIWSIR,PYTHON'
>>> a # 原数据对象并没有改变
'qiwsir,Python'
>>> b = a.upper()
>>> b
'QIWSIR,PYTHON'
>>> c = b.lower() # 将所有的小写字母变成大写字母
>>> c
'qiwsir,Python'
>>> a
'qiwsir,Python'
>>> a.capitalize() # 把字符串的第一个字母变成大写
'Qiwsir,Python'
>>> a # 原数据对象没有改变
'qiwsir,Python'
>>> b = a.capitalize() # 新建立了一个
>>> b
'Qiwsir,Python'
>>> a = "qiwsir,github"
>>> a.istitle()
False
>>> a = "QIWSIR" # 当全是大写的时候,返回 False
>>> a.istitle()
False
>>> a = "qIWSIR"
>>> a.istitle()
False
>>> a = "Qiwsir,github" # 如果这样,也返回 False
>>> a.istitle()
False
>>> a = "Qiwsir" # 这样是 True
>>> a.istitle()
True
>>> a = 'Qiwsir,Github' # 这样也是 True
>>> a.istitle()
True
>>> a = "Qiwsir"
>>> a.isupper()
False
>>> a.upper().isupper()
True
>>> a.islower()
False
>>> a.lower().islower()
True
Python2的中文编码(encode和decode函数)
Python2 默认的编码是 ascii,通过 encode 可以将对象的编码转换为指定编码格式(称作“编码”),而 decode 是这个过程的逆过程(称作“解码”)
>>> a = "中"
>>> type(a)
<type 'str'>
>>> a
'\xe4\xb8\xad'
>>> len(a)
3
>>> b = a.decode()
>>> b
u'\u4e2d'
>>> type(b)
<type 'unicode'>
>>> len(b)
1
上面试验中,变量 a 引用了一个字符串,所谓字符串(str),严格地将是字节串,它是经过编码后的字节组成的序列。也就是你在上面的实验中,看到的是“中”这个字在计算机中编码之后的字节表示。(关于字节,看官可以google 一下)。用 len(a)来度量它的长度,它是由三个字节组成的 。
Python 中如何避免中文是乱码?首先,提倡使用 utf-8 编码方案,因为它跨平台不错。
经验一:在开头声明:
# -*- coding: utf-8 -*-
有朋友问我-*-有什么作用,那个就是为了好看,爱美之心人皆有,更何况程序员?当然,也可以写成:
# coding:utf-8
经验二:遇到字符(节)串,立刻转化为 unicode,不要用 str(),直接使用 unicode()
unicode_str = unicode('中文', encoding='utf-8')
print unicode_str.encode('utf-8')
经验三:如果对文件操作,打开文件的时候,最好用 codecs.open,替代 open(这个后面会讲到,先放在这里)
import codecs
codecs.open('filename', encoding='utf8')
如果用 Python3,坑爹的编码问题就不烦恼了。 我们使用python内置函数id()查看内存位置
>>> lst=['python','java']
>>> id(lst)
52855176L
>>>
再议extend函数和append函数区别:
>>> lst=['python','java']
>>> id(lst)
52855176L
>>> lst.extend('abc')
>>> lst
['python', 'java', 'a', 'b', 'c']
>>> lst.extend(1) #1不是可迭代的对象 会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> lst.append(2)
>>> lst
['python', 'java', 'a', 'b', 'c', 2]
extend它把一个字符串"abc"转化为['a','b','c'],然后将这个列表作为参数,提供给 extend,并将列表中的元素塞入原来的列表lst中。
>>> lst=[1,2,3]
>>> id(lst)
52958664L
>>> lst.append(11)
>>> id(lst)
52958664L
>>>
#显然append是原地修改列表内容 ,原列表内存地址不改变。
>>> lst=[1,2,3]
>>> id(lst)
52855176L
>>> lst.extend([1,2,3])
>>> lst
[1, 2, 3, 1, 2, 3]
>>> id(lst)
52855176L
#显然extend也是原地修改列表,内存位置不改变。
这里讲述的两个让列表扩容的函数 append() 和 extend() 。从上面的演示中,可以看到他们有相同的地方:
• 都是原地修改列表
• 既然是原地修改,就不返回值
原地修改没有返回值,就不能赋值给某个变量
>>> one=['good','good','study']
>>> another = one.extend(['day','day','up']) #对于没有返回值得函数,得到的结果是这样
>>> another #这样的,什么结果也没有得到
>>> one
['good', 'good', 'study', 'day', 'day', 'up']
而对于append函数,结果却大不一样。
>>> list=[1,2,3]
>>> list.append(['meihao','github'])
>>> list
[1, 2, 3, ['meihao', 'github']]
>>> len(list)
4
>>>
append 是整建制地追加,extend 是个体化扩编 。
综上所述:append函数和的区别
相同点:
• 都是原地修改列表
• 既然是原地修改,就不返回值
不同点:
append 是整建制地追加,extend 是个体化扩编。
多维List(在多维的情况下,里面的 list 被当成一个元素对待)
>>> matri=[[1,2,3],[4,5,6],[7,8,9]]
>>> matri[0][1]
2
>>> matri=[[1,2,3],[4,5,6],[7,8,9],'d','e']
>>> matri[1][1]
5
>>> matri[-3][1]
8
>>> matri[0:]
[[1, 2, 3], [4, 5, 6], [7, 8, 9], 'd', 'e']
>>>
字符串中的split()和join()用法:
- 这个内置函数实现的是将 str 转化为 list。其中 str=""是分隔符
- join 可以说是 split 的逆运算
>>> line='hello,i am fighter.lu welcome you'
>>> line.split('.') #以英文.分隔 得到的是一个列表
['hello,i am fighter', 'lu welcome you']
>>> line.split('.',1) #按照1 最大长度获取两个元素
['hello,i am fighter', 'lu welcome you']
>>> line.split('.',2)
['hello,i am fighter', 'lu welcome you']
>>>
>>> name = 'fighter Lu'
>>> name.split(' ') #也有可能用空格来做为分隔符
['fighter', 'Lu']
>>>
>>>
>>> s = 'i am,wriing\mpython\tbook on line'
>>> print s
i am,wriing\mpython book on line
>>> s.split()
['i', 'am,wriing\\mpython', 'book', 'on', 'line']
>>> s = 'i am,wriing\npython\tbook on line' #这个字符串中有空格,逗号,换行\n,tab 缩进\t 符号
>>> print s
i am,wriing
python book on line
>>> s.split() #用 split(),但是括号中不输入任何参数
['i', 'am,wriing', 'python', 'book', 'on', 'line']
>>>
>>>
>>> name
'fighter Lu'
>>> name = ['fighter Lu','github']
>>> ''.join(name) #将list中的元素连接起来,但是没有连接符,表示一个一个紧邻着
'fighter Lugithub'
>>> '.'.join(name) #以英文的句点做为连接分隔符
'fighter Lu.github'
>>> ' '.join(name) #以空格做为连接的分隔符
'fighter Lu github'
>>>
>>>
>>> s = 'i am,wriing\npython\tbook on line'
>>> print s
i am,wriing
python book on line
>>> s.split()
['i', 'am,wriing', 'python', 'book', 'on', 'line']
>>> ''.join(s.split()) #重新连接,不过有一点遗憾,am 后面逗号还是有的。怎么去掉?
'iam,wriingpythonbookonline'
tuple 用在哪里?
既然它是 list 和 str 的杂合,它有什么用途呢?不是用 list 和 str 都可以了吗?在很多时候,的确是用 list 和 str 都可以了。但是,看官不要忘记,我们用计算机语言解决的问题不都是简单问题,就如同我们的自然语言一样,虽然有的词汇看似可有可无,用别的也能替换之,但是我们依然需要在某些情况下使用它们:
一般认为,tuple 有这类特点,并且也是它使用的情景:
• Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple代替 list。
• 如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
• Tuples 可以在 dictionary(字典,后面要讲述) 中被用做 key,但是 list 不行。Dictionary key 必须是不可变的。Tuple 本身是不可改变的,但是如果您有一个 list 的 tuple,那就认为是可变的了,用做 dictionarykey 就是不安全的。只有字符串、整数或其它对 dictionary 安全的 tuple 才可以用作 dictionary key。
• Tuples 可以用在字符串格式化中
字典的更新update的多种用途:
>>> dic={'name':'zhangshan'}
>>> dic1={'song':'i have a dream'}
>>> dic.update(dic1)
>>> dic
{'name': 'zhangshan', 'song': 'i have a dream'}
>>> dic1.update([('name','lishi'),('web','github')])
>>> dic1
{'web': 'github', 'name': 'lishi', 'song': 'i have a dream'}
>>>
使用has_key判断字典的键是否在字典中:
>>> dic1
{'web': 'github', 'name': 'lishi', 'song': 'i have a dream'}
>>>
>>>
>>> dic1.has_key('web')
True
>>> dic1.has_key('name')
True
>>>

浙公网安备 33010602011771号