请教一个python问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一个python问题相关的知识,希望对你有一定的参考价值。

请写出下列运行最终结果
>>>
seq = [11, 10, 9, 9, 10, 10, 9, 8, 23, 9, 7, 18, 12, 11, 12]
>>>
filter(lambda x: x % 2, seq)

顺便帮忙解释一下,谢谢!

最终结果是一个列表 seq中的所有奇数列表
[11, 9, 9, 9, 23, 9, 7, 11]

seq = [11, 10, 9, 9, 10, 10, 9, 8, 23, 9, 7, 18, 12, 11, 12] # 定义一个列表

filter(lambda x: x % 2, seq) # 比较复杂

lambda x: x % 2 # 意思是创建一个匿名函数,这个函数的参数是 x ,返回 x%2,即 x除以2的余数,可能是0或1,根据返回值,可以判断出x是奇数还是偶数。

filter( 匿名函数, seq) # 意思是用“匿名函数”来遍历 seq 中的每一个数值,返回一个使函数返回值为true的元素的序列。

将filter(lambda x: x % 2, seq) 用python代码解释一下如下
def t(x): # 相当于匿名函数
return x % 2

r = [] # 定义最终生成列表
for i in seq: # 遍历seq
if t(i):r.append(i) # 调用函数 t(i),如果返回值为 True ,则将 i 加入到 r 中。

用简单一些的代码如下:
[ i for i in seq if i % 2 == 1 ] # i会遍历seq,符合条件 i%2==1的值会生成最终列表
参考技术A filter(<判断函数,真的留下,假的不要>,<要判断的序列>)

lambda x:x%2
返回除以2的余数,作为判断函数返回0就是假,其他为真。

综合起来,取出seq中不能被2整除的数
参考技术B 把那个列表的数据全部%2
相当于[x % 2 for x in seq]

r = []
for x in seq:
r.append(x % 2)

请教关于python的raise使用的问题

python中的异常

异常是指程序中的例外,违例情况。异常机制是指程序出现错误后,程序的处理方法。当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。
Exception类是常用的异常类,该类包括StandardError,StopIteration, GeneratorExit, Warning等异常类。
StandardError类是python中的错误异常,如果程序上出现逻辑错误, 将引发该异常。StandardError类是所有内敛异常的基类,放置在默认的命名空间中,因此使用IOEroor,
EOFError, ImportError等类,不需要导入exception模块。
StopIteration类判断循环是否执行到尾部,如果循环到尾部,则抛出该异常。
GeneratorExit类是由Generator函数引发的异常,当调用close()时引发该异常。
Warning类表示程序中的代码引起的警告。
python中的异常使用继承结构创建,可以在异常处理程序中捕获基类异常,也可以捕获各种子类异常,python中使用try...except语句捕获异常,异常子句定义在try子句后面。

try...except的使用方法

try...except用于处理问题语句,捕获可能出现的异常。try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常。
演示try...except语句捕获IOError异常
try:
file("hello.txt", "r") #如果文件不存在,引发异常
print "读文件"
except IOError: #捕获IO异常
print "文件不存在"
except: #其它异常
print "程序异常"

python与Java的异常处理模式相似,异常处理语句也可以嵌套,演示如下:
try:
s = "hello"
try:
print s[0] + s[1]
print s[0] - s[1]
except TypeError:
print "字符串不支持减法运算"
except:
print "异常"
如果外层try子句中的代码引发异常,程序将直接跳转到外层try对应的except子句,而内部的try子句将不会被执行。

try...finally的使用方法
try...except后还可以添加一个finally子句。无论异常是否发生,finally子句都会被执行。所有的finally子句通常用于关闭因异常而不能释放的系统资源。
try:
f = open("hello.txt", "r")
try:
print f.read(5)
except:
print "读文件异常"
finally:
print "释放资源"
f.close()
except IOError:
print "文件不存在"

使用raise抛出异常
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
演示raise用法
try:
s = None
if s is None:
print "s 是空对象"
raise NameError #如果引发NameError异常,后面的代码将不能执行
print len(s)
except TypeError:
print "空对象没有长度"

自定义异常
python允许程序员自定义异常,用于描述python中没有涉及的异常情况,自定义异常必须继承Exception类,自定义异常按照命名规范以"Error"结尾,显示地告诉程序员这是异常。自定义异常使用raise语句引发,而且只能通过人工方式触发。
from __future__ import division

class DivisionException(Exception):
def __init__(self, x, y):
Exception.__init__ (self, x, y) #调用基类的__init__进行初始化
self.x = x
self.y = y

if __name__ == "__main__":
try:
x = 3
y = 2
if x % y > 0: #如果大于0, 则不能被初始化,抛出异常
print x/y
raise DivisionException(x, y)
except DivisionException,div: #div 表示DivisionException的实例对象
print "DivisionExcetion: x/y = %.2f" % (div.x/div.y)

assert语句的使用
assert语句用于检测某个条件表达式是否为真。assert语句又称为断言语句,即assert认为检测的表达式永远为真,if语句中的条件判断都可以使用assert语句检测。
参考技术A raise后面也要跟python内定义的基类,楼主想问的是这个吗

以上是关于请教一个python问题的主要内容,如果未能解决你的问题,请参考以下文章

请教一个关于python处理json的问题

请教一个python写的交换矩阵行的代码问题

请教一个问题,怎么提高 python 爬虫的爬取效率

请教python调用dll动态库的传参问题

请教python requests.post()请求一个第三方接口的问题返回中文乱码的问题

请教python 采 集 requests post请求一个第三方接口中文乱码的问题