首页 / PYTHON / python基础学习笔记2
python基础学习笔记2
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python基础学习笔记2,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6139字,纯文字阅读大概需要9分钟。
内容图文
常见的创建词典的方法:
>>>dic = {‘tom‘:11, ‘sam‘:57,‘lily‘:100}
>>>print dic[‘tom‘]
>>>dic[‘tom‘] = 30
在词典中增添一个新元素的方法:
>>>dic[‘limi‘] = 99
>>>print dic
在循环中,dict的每个键,被提取出来,赋予给key变量。
>>>print dic.keys() # 返回dic所有的键
>>>print dic.values() # 返回dic所有的值
>>>print dic.items() # 返回dic所有的元素(键值对)
>>>del dic[‘tom‘] # 删除 dic 的‘tom’元素
我们打开一个文件,并使用一个对象来表示该文件:
"r" # 只读
引入模块后,可以通过模块.对象的方式来调用引入模块中的某个对象。上面例子中,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的定义,更改调用方式:
关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:
在定义函数的时候,使用形如c=19的方式,可以给参数赋予默认值(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)
在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
如果你多个等长的序列,然后想要每次循环时从各个序列分别取出一个元素,可以利用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
>>> tb = [4,5,6]
>>> zipped = zip(ta,tb)
>>> print type(zipped)
<type ‘list‘>
>>> print zipped
[(1, 4), (2, 5), (3, 6)]
>>> print zipped[1]
abcd
我们运行一下python命令行:
>>>f = open(‘test.txt‘)
>>>f.next()
>>>f.next()
在项目开发中,异常处理是不可或缺的。异常处理帮助人们debug,通过更加丰富的信息,让人们更容易找到bug的所在。异常处理还可以提高程序的容错性。
我们之前在讲循环对象的时候,曾提到一个StopIteration的异常,该异常是在循环对象穷尽所有元素时的报错。
我们以它为例,来说明基本的异常处理。
for i in range(100):
print re.next()
print ‘HaHaHaHa‘
首先,我们定义了一个循环对象re,该循环对象将进行5次循环,每次使用序列的一个元素。
try:
for i in range(100):
print re.next()
except StopIteration:
print ‘here is end ‘,i
在try程序段中,我们放入容易犯错的部分。我们可以跟上except,来说明如果在try部分的语句发生StopIteration时,程序该做的事情。如果没有发生异常,则except部分被跳过。
...
except exception1:
...
except exception2:
...
except:
...
else:
...
finally:
print(a*2)
except TypeError:
print("TypeError")
except:
由于a没有定义,所以是NameError。异常最终被except:部分的程序捕捉。
try:
m = 1/0
except NameError:
print("Catch NameError in the sub-function")
try:
test_func()
except ZeroDivisionError:
如果try中没有异常,那么except部分将跳过,执行else中的语句。
finally是无论是否有异常,最后都要做的一些事情。
流程如下,
try->异常->except->finally
原文:http://www.cnblogs.com/Aiapple/p/5261503.html
内容总结
以上是互联网集市为您收集整理的python基础学习笔记2全部内容,希望文章能够帮你解决python基础学习笔记2所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。