Python基础入门-查缺补漏(实用教程集)

     本篇文章是针对之前写的Python基础入门系列文章中的内容查缺补漏。当然,你也可以通过点击下面的链接来了解更多Python基础知识!不得不说的是我写的Python文章可能不是最好的,但是一定是最用心的,同样,我的水平也有限。我想对于任何一个想入门学习Python的同学,网上Python的教程会有很多,大家可以随意自由学习。所以,本篇文章也是写给那些有需要的同学。希望大家可以在Python的世界里,发挥光芒!

第一章:Python基础入门-数据类型

第二章:Python基础入门-字符串详解

第三章:Python基础入门-IF语句

第四章:Python基础入门-WHILE循环

第五章:Python基础入门-For循环

第六章:Python基础入门-列表

第七章:Python基础入门-字典

第八章:Python基础入门-文件读写

第九章:Python基础入门-异常处理

第十章:Python基础入门-函数定义及调用

第十一章:Python基础入门-函数参数

第十二章:Python基础入门-面向对象

第十三章:Python基础入门-实现计算器多种姿势

第十四章:Python基础入门-实现猜数字小游戏

第十五章:Python基础入门-unittest单元测试框架解析

第十六章:Python基础入门-IF__NAME__=="__MAIN__":解析

第十七章:Python基础入门-集合

第十八章:Python基础入门-列表推导式

第十九章:Python基础入门-列表推导式练习

差缺补漏篇

除法(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
>>>

 

posted @ 2018-01-30 16:44  IT测试老兵  阅读(478)  评论(0)    收藏  举报
作者:测试老兵
出处:https://www.cnblogs.com/fighter007/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。