python相关

10. Python的补充内容

2018-03-27  本文已影响0人  edwin1993
sys模块

sys.argv 为例
sys.argv列表包含命令行参数

import sys

if len(sys.argv) < 2:
    print ('Nso action specified.')
    sys.exit()
    
if sys.argv[1].startswith('--'):
    option = sys.argv[1][2:]
    if option == 'version':
        print( 'Version 1.2')
    elif option == 'help':
        print('--version or --help ')
    else:
        print ('Unknown option.')
        
    sys.exit()
else:
    print('argvs should be --version or --help')

在sys.argv列表中总是至少有一个项目。它就是当前运行的程序名称,作为sys.argv[0],其他的命令行参数在这个项目之后。

os模块

这个模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行。

import os
# 在cmd中执行ping www.baidu.com
os.system("ping www.baidu.com ")
单语句块

语句块是通过它的缩进层次与其它块区分开来的。然而这在大多数情况下是正确的,但是并非100%的准确。如果你的语句块只包含一句语句,那么你可以在条件语句或循环语句的同一行指明它。

flag = True
if flag: print 'Yes'
列表综合

在很多时候,我们都是使用循环来处理列表中的每一个元素,而使用列表综合可以用一种更加精确、简洁、清楚的方法完成相同的工作 。

listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
在函数中接收元组和列表

当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用 * 和 ** 前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。

def sumUp(*args):
    totle = 0
    for i in args:
        totle += i
    return totle
    
print(sumUp(1,2,3,4,5))

# 结果
15

由于在args变量前有 * 前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是 ** 前缀,多余的参数则会被认为是一个字典的键/值对。

def fun(**args):
    print(args)

fun(num1 = 1, num2 = 2)

# 结果
{'num1': 1, 'num2': 2}
lambda形式

lambda语句被用来创建新的函数对象,并且在运行时返回它们。
编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

#将一个 list 里的每个元素都平方:
map( lambda x: x*x, [y for y in range(10)] )

#这个写法要好过
def sq(x):
    return x * x

map(sq, [y for y in range(10)])
exec语句

exec语句用来执行储存在字符串或文件中的Python语句。

exec('print (\'123\')')
eval语句

eval语句用来计算存储在字符串中的有效Python表达式

eval('2*3')
assert语句

assert语句用来声明某个条件是真的。例如,如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。

li  = [1,2,3,4]
assert len(li) >=4
li.pop()
#下句会引发error
assert len(li) >=4
  1. 可以在预计正常情况下程序不会到达的地方放置断言 :assert false
  2. 断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
  3. 使用断言测试方法执行的前置条件和后置条件
  4. 使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)

不要使用断言语句去修改变量和改变方法的返回值

repr函数

repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。repr函数和反引号用来获取对象的可打印的表示形式。你可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。

>>> dict = {'runoob': 'runoob.com', 'google': 'google.com'};
>>> repr(dict)
"{'google': 'google.com', 'runoob': 'runoob.com'}"
上一篇下一篇

猜你喜欢

热点阅读