python基础学习笔记2
常见的创建词典的方法:
>>>dic = {'tom':11, 'sam':57,'lily':100} >>>print type(dic)
与表类似,以逗号分隔每一个元素;每一个元素包含两个部分,键和值;(不可以变的对象可以作为键)。值可以是任意对象;键和值是一一对应;
>>>print dic['tom'] >>>dic['tom'] = 30 >>>print dic
在词典中增添一个新元素的方法:
>>>dic['limi'] = 99 >>>print dic
dic = {'lilei': 90, 'lily': 100, 'sam': 57, 'tom': 90}
for key in dic:
print dic[key]
在循环中,dict的每个键,被提取出来,赋予给key变量。
>>>print dic.keys() # 返回dic所有的键 >>>print dic.values() # 返回dic所有的值 >>>print dic.items() # 返回dic所有的元素(键值对) >>>dic.clear() # 清空dic,dict变为{}
>>>del dic['tom'] # 删除 dic 的‘tom’元素
>>>print(len(dic))
我们打开一个文件,并使用一个对象来表示该文件:
"r" # 只读
>>>f = open("test.txt","r")
具体用法需要在实践,这里只是简单的整体概括
def laugh():
print 'HaHaHaHa'
import first
for i in range(10):
first.laugh()
在second.py中,我们使用了first.py中定义的laugh()函数。
引入模块后,可以通过模块.对象的方式来调用引入模块中的某个对象。
上面例子中,first为引入的模块,laugh()是我们所引入的对象。
Python中还有其它的引入方式,
import a as b # 引入模块a,并将模块a重命名为b from a import function1 # 从模块a中引入function1对象。调用a中对象时,我们不用再说明模块,即直接使用function1,而不是a.function1。 from a import * # 从模块a中引入所有对象。调用a中对象时,我们不用再说明模块,即直接使用对象,而不是a.对象。
这些引用方式,可以方便后面的程序书写。
Python会在以下路径中搜索它想要寻找的模块:
- 程序所在的文件夹
- 标准库的安装路径
- 操作系统环境变量PYTHONPATH所包含的路径
可以将功能相似的模块放在同一个文件夹(比如说this_dir)中,构成一个模块包。通过
import this_dir.module
def f(a,b,c):
return a+b+c print(f(1,2,3))
有些情况下,用位置传递会感觉比较死板。关键字(keyword)传递是根据每个参数的名字传递参数。
关键字并不用遵守位置的对应关系。依然沿用上面f的定义,更改调用方式:
print(f(c=3,b=2,a=1))
关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:
print(f(1,c=3,b=2))
在定义函数的时候,使用形如c=10的方式,可以给参数赋予默认值(default)。
如果该参数最终没有被传递值,将使用该默认值。
def f(a,b,c=10):
return a+b+c print(f(3,2))
print(f(3,2,1))
在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.
下面是包裹位置传递的例子:
def func(*name):
print type(name)
print name func(1,4,6)
func(5,6,7,1,2,3)
两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。
def func(**dict):
print type(dict)
print dict func(a=1,b=9)
func(m=2,n=1,c=11)
与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func
。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。
*和**,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:
def func(a,b,c):
print a,b,c args = (1,3,4)
func(*args)
在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。
在调用func时使用*,是为了提醒Python:
我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有*会是什么后果?)
相应的,也存在对词典的解包裹,使用相同的func定义,然后:
dict = {'a':1,'b':2,'c':3}
func(**dict)
在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。
之前我们已经使用过range()来控制for循环。现在,我们继续开发range的功能,以实现下标对循环的控制:
S = 'abcdefghijk'
for i in range(0,len(S),2):
print S[i]
利用enumerate()函数,可以在每次循环中同时得到下标和元素:
S = 'abcdefghijk' for (index,char) in enumerate(S):
print index
print char
实际上,enumerate()在每次循环中,返回的是一个包含两个元素的定值表(tuple),两个元素分别赋予index和char
如果你多个等长的序列,然后想要每次循环时从各个序列分别取出一个元素,可以利用zip()方便地实现:
ta = [1,2,3]
tb = [9,8,7]
tc = ['a','b','c']
for (a,b,c) in zip(ta,tb,tc):
print(a,b,c)
每次循环时,从各个序列分别从左到右取出一个元素,合并成一个tuple,然后tuple的元素赋予给a,b,c
>>> ta = [1,2,3]
>>> tb = [4,5,6]
>>> zipped = zip(ta,tb)
>>> print type(zipped)
<type 'list'>
>>> print zipped
[(1, 4), (2, 5), (3, 6)]
>>> print zipped[1]
(2, 5)
abcd
我们运行一下python命令行:
>>>f = open('test.txt') >>>f.next() >>>f.next() ...
for line in open('test.txt'):
print line
我们之前在讲循环对象的时候,曾提到一个StopIteration的异常,该异常是在循环对象穷尽所有元素时的报错。
我们以它为例,来说明基本的异常处理。
一个包含异常的程序:
re = iter(range(5)) for i in range(100):
print re.next() print 'HaHaHaHa'
首先,我们定义了一个循环对象re,该循环对象将进行5次循环,每次使用序列的一个元素。
re = iter(range(5))
try:
for i in range(100):
print re.next()
except StopIteration:
print 'here is end ' print 'HaHaHaHa'
在try程序段中,我们放入容易犯错的部分。我们可以跟上except,来说明如果在try部分的语句发生StopIteration时,程序该做的事情。如果没有发生异常,则except部分被跳过。
try:
...
except exception1:
...
except exception2:
...
except:
...
else:
...
finally:
...
try:
print(a*2)
except TypeError:
print("TypeError")
except:
print("Not Type Error & Error noted")
由于a没有定义,所以是NameError。异常最终被except:部分的程序捕捉。
def test_func():
try:
m = 1/0
except NameError:
print("Catch NameError in the sub-function") try:
test_func()
except ZeroDivisionError:
print("Catch error in the main program")
子程序的try...except...结构无法处理相应的除以0的错误,所以错误被抛给上层的主程序。
如果try中没有异常,那么except部分将跳过,执行else中的语句。
finally是无论是否有异常,最后都要做的一些事情。
流程如下,
try->异常->except->finally
- 词典
- dic={'tom':11,'sam':57}
- 增加元素
- dic['limi']=99
- 注意
- key-value,在对key的操作都要引号无论是定义或者引用。
- 且key的值是不可变的,value是可以变动的;
- 字典元素循环调用
- for key in dic:
- 常用方法
- >>> dic.keys() # 返回dic所有的键
- >>> dic.values() # 返回dic所有的值
- >>> dic.items() # 返回dic所有的元素(键值对)
- >>> dic.clear() # 清空dic,dict变为{}
- >>> del dic['tom'] # 删除 dic 的‘tom’元素
- 文本文件输入输出
- 创建文件对象
- f = open(文件名,模式)
- 模式
- "r" # 只读
- “w” # 写入
- 模式
- f = open(文件名,模式)
- 创建文件对象
- 模块
- 模块引用
- import a as b
- from a import function1
- from a import *
- 搜索模块的路径
- - 程序所在的文件夹
- - 标准库的安装路径
- - 操作系统环境变量PYTHONPATH所包含的路径
- 模块包
- 将功能相似的模块放在同一文件夹中(如this_dir)构成模块包
- import this_dir.module
- 引入this_dir 文件夹中的module模块
- this_dir中必须包含 __init__.py文件,告诉Python这是一个模块包。
- 将功能相似的模块放在同一文件夹中(如this_dir)构成模块包
- 模块引用
- 函数参数
- 值传递
- 根据位置关系
- 关键字传递
- 根据关键字名称
- 参数默认值
- 调用时可以不用传值,而是用默认值
- 包裹传递
- def func(*name):
- func(1,4,6): 将数 1,4,6 传给name 作为一个tuple (1,4,6)
- func(5,6,7,1,2): 将数5,6,7,1,2 传给name 作为一个tuple(5,6,7,1,2)
- def func(**dict):
- func(a=1,b=9):将数a=1,b=9 传给dict作为字典('a':1,'b':9)
- 像是将数据打包一起传送,因此叫做包裹传递
- def func(*name):
- 解包裹
- def func(a,b):
- args=(1,2)
- func(*args)
- 传递的时候,将一个tuple args 传过去变成 三个数
- dict={'a':1,'b':2}
- func(**dict)
- 传递的时候,将字典 dict 传过去变成三个数
- 注意,tuple 传是* ,dict传则是**
- args=(1,2)
- def func(a,b):
- 值传递
- 循环设计
- range()
- 定义:上限,下限,步长
- enumerate()
- 返回下标以及值
- zip()
- 从多个列表中,依次各取出一个元素
- for line in open('test.txt'):
- range()
- 异常处理
- try->异常->except->finally
- try->无异常->else->finally
python基础学习笔记2的更多相关文章
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- python 基础学习笔记(1)
声明: 本人是在校学生,自学python,也是刚刚开始学习,写博客纯属为了让自己整理知识点和关键内容,当然也希望可以通过我都博客来提醒一些零基础学习python的人们.若有什么不对,请大家及时指出, ...
- Python 基础学习笔记(超详细版)
1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...
- Python基础学习笔记(十三)异常
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-exceptions.html Python用异常对象(excep ...
- Python基础学习笔记(十二)文件I/O
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...
- Python基础学习笔记(十一)函数、模块与包
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...
- Python基础学习笔记(十)日期Calendar和时间Timer
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-date-time.html 3. http://www.liao ...
- Python基础学习笔记(九)常用数据类型转换函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-variable-types.html 3. http://www ...
- Python基础学习笔记(八)常用字典内置函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...
- Python基础学习笔记(七)常用元组内置函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...
随机推荐
- 策划编写一个新的Helper类
https://code.csdn.net/jy02305022/blqw-data 有朋友看见的话给点意见呗
- java spring 邮件发送
开发中经常会遇到发送邮件进行用户验证,或者其它推送信息的情况,本文基于spring,完成邮件的发送,主要支持普通文本邮件的发送,html文本邮件的发送,带附件的邮件发送,没有实现群发.多个附件发送等需 ...
- iOS-App上架流程
前言:作为一名IOS开发者,把开发出来的App上传到App Store是必须的.下面就来详细介绍下具体流程. 1.打开苹果开发者中心:https://developer.apple.com 打开后点击 ...
- removeClass 按钮点击添加class效果
html代码: <div class="game"> <span class="active">全部</span> < ...
- hudson部署过程
hudson部署过程: java安装 http://developer.51cto.com/art/201504/470683.htm tomcat安装 http://blog.csdn.net/hu ...
- Android沉浸式通知栏设计
转载博客:http://www.2cto.com/kf/201503/381348.html Android4.4新特性,系统状态栏一体化. 实现的步骤主要有以下几点: 1.android4.4 以上 ...
- Codeforces Round #327 (Div. 2) B. Rebranding C. Median Smoothing
B. Rebranding The name of one small but proud corporation consists of n lowercase English letters. T ...
- 分享一个LiteDB做的简单考试系统辅助工具
凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- 创建第二个 vlan network "vlan101" - 每天5分钟玩转 OpenStack(96)
前面我们创建了 vlan100,并部署了 instance,今天将继续创建第二个 vlan network "vlan101". subnet IP 地址为 172.16.101. ...