python学习之关键字
1、assert
语句形式:assert 布尔表达式[,msg]
解释:assert是检验一个表达式是否为真。若不为真,则触发一个错误。
例如:
assert False
assert 1==2
assert 'test' == 'tast' and 3
触发错误如下:
Traceback (most recent call last):
File "C:\Users\rznh\Documents\test.py", line 3, in <module>
assert 'test' == 'tast' and 3
AssertionError
Tip:在用try···except捕捉错误时,例如:
def test(inputp):
try:
assert inputp == 5
print 'assert'
except AssertionError:
print 'error'
return 0
当inputp != 5时,assert会触发AssertionError错误,直接被except捕获,print这句不再执行。
但是在调试此程序时,总是无法执行print语句。突然发现assert inputp == 5中的5是int型,而raw_input输入为str型,顿时恍然大悟。将5改成‘5’或者将raw_input改为input,程序通过。 2、yield
先看斐波那契数列程序
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
# print b
a, b = b, a + b
n = n + 1
调用
>>> for n in fab(5):
... print n
...
1
1
2
3
5
简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ 3、try···except···finally
try:
语句1
except [error_name1]:
语句2
finally:
语句3
try将会捕获语句1中的异常,不在语句1中的无法捕获。except对应某一错误[error_name],当某一错误被触发时,将会执行语句2。无论某一错误是否被触发,都会执行语句3. 4、exec
这个是个新鲜玩意儿。exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句。下面是一个简单的例子。
>>> exec 'print "Hello World"'
Hello World
也可以这样:
exec '''
def won():
print "It's a wonderful thing" won()'''
还可以这样:
code = open('ex241.py').read()
print type(code)
exec code
5、global和局部变量
局部变量:当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。这称为变量的作用域。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。 例 使用局部变量
#!/usr/bin/python
# Filename: func_local.py
def func(x): print 'x is', x
x = 2
print 'Changed local x to', x x = 50
func(x)
print 'x is still', x
输出
$ python func_local.py x is 50
Changed local x to 2
x is still 50
它如何工作
在函数中,我们第一次使用x的值的时候,Python使用函数声明的形参的值。
接下来,我们把值2赋给x。x是函数的局部变量。所以,当我们在函数内改变x的值的时候,在主块中定义的x不受影响。
在最后一个print语句中,我们证明了主块中的x的值确实没有受到影响。 使用global语句
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。 例 使用global语句
#!/usr/bin/python
# Filename: func_global.py
def func(): global x
print 'x is', x x = 2
print 'Changed local x to', x x = 50
func()
print 'Value of x is', x
输出
$ python func_global.py x is 50
Changed global x to 2
Value of x is 2
它如何工作
global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。你可以使用同一个global语句指定多个全局变量。例如global x, y, z。 6、is
Python中的对象包含三要素:id、type、value。其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对象,是通过id来判断的。==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
如下代码或许可以帮助你理解。
>>> a = 1
>>> b = 1.0
>>> a is b
False
>>> a == b
True
>>> id(a)
12777000
>>> id(b)
14986000
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a == b
True
>>> id(a)
12777000
>>> id(b)
12777000
2、lambda
lambda语句被用来创建新的函数对象,并且在运行时返回它们。 例:
def make_repeater(n,m):
return lambda s,t: s*n+t*m twice = make_repeater(2,3) print twice('word','')
print twice(5,6)
输出:
wordword222
28
解释:
make_repeater定义了一个二元函数f(s,t;n,m),s、t为变量,n、m为未知常量。twice给定了常量n、m的值,变成了二元常函数g(s,t),其中不含未知常量。twice(5,6)是给定函数的自变量,得出特定的因变量。可以说,lambda构造了一个函数集。
python学习之关键字的更多相关文章
- python学习笔记系列----(八)python常用的标准库
终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...
- python学习心得第三章
python学习心得第三章 1.三元运算 变量=值1 if 条件 else 值2 由图如果条件成立则赋值1给变量,如果条件不成立则赋值2给变量. 2.数据类型 集合:set() class set(o ...
- python学习心得第一章
初始python 1什么是程序 计算机程序是一组执行某种动作的的指令.和那些电路.芯片.显卡.硬盘等不同,它不是计算机本身可以触摸的部分,而是隐藏在背后运行在硬件上面的东西.程序就是一系列告诉没有知觉 ...
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- coursera python 学习总结
为啥要写这篇总结?早上突然想到了四个字:知行合一.实践,总结,再实践,再总结经验,积累经验,为己所用.闲话少叙,来干货: 1.目标要单一,如果想要完成课程,还要健身,还要玩玩游戏.看看电影,还学别的课 ...
- Python 学习日记(第三周)
知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...
- 《Python学习手册》读书笔记
之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我 ...
- VS2013中Python学习环境搭建
VS2013中Python学习笔记[环境搭建] 前言 Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字, ...
- Python:Python学习总结
Python:Python学习总结 背景 PHP的$和->让人输入的手疼(PHP确实非常简洁和强大,适合WEB编程),Ruby的#.@.@@也好不到哪里(OO人员最该学习的一门语言). Pyth ...
随机推荐
- 读取微博feed伪代码
// 读取我的好友fids $db = new DB(); $mc = new Memcached(); $_uid = 1; // my uid $sql = "select * from ...
- css 之 1.基本语法规范
文章转自:http://www.10wy.net/Article/CSS/CSS_list_8.html查看更多更专业性的文章请到:网页设计网 第一篇 CSS 1.基本语法规范 分析一个典型CSS的语 ...
- Java 中Iterator 、Vector、ArrayList、List 使用深入剖析
标签:Iterator Java List ArrayList Vector 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些 ...
- Ibatis动态拼装sql,常用标签总结及举栗子。
今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ib ...
- Java Base64 类
package org.yp.ypfinancing.core.service.payV2.domain.service.Sdp.utils; public final class Base64 { ...
- sqlite的常用语法
sqllite 增删改查创建表的语法 创建表db.execSQL("create table user(_id integer primary key autoincrement,numbe ...
- Spark的WorkCount的例子
之前为了搭建scala开发spark的环境花了几天的时间,终于搞定了,具体可以参考:http://www.cnblogs.com/ljy2013/p/4964201.html .下面就是用一个示例 ...
- simple_html_dom配合snoopy使用
https://github.com/samacs/simple_html_dom Snoopy的特点是“大”和“全”,一个fetch什么都采到了,可以作为采集的第一步.接下来就需要用simple_h ...
- VC保存当面某个区域的图片
void ViewReportDlg::CopyScreenToBitmap() { CDC *cdc = this->GetDC(); HDC wnd = cdc->GetSafeHdc ...
- xamarin for android 生成时“java.exe已退出 代码为1”
Xamarin Studio中创建了一个Android Application 运行时出现错误:C:\Program Files\MSBuild\Xamarin\Android\Xamarin.And ...