Python实用操作

版权声明:转载请注明出处,谢谢。 https://blog.csdn.net/NNNNNNNNNNNNY/article/details/70739614

函数参数

默认参数

定义时:必选参数在前,默认参数在后。
调用时:多个默认参数间没有顺序

# 定义
def enroll(name, gender, age=6, city='Beijing'):
    ...

# 调用
enroll('Adam', 'M', city='Tianjin')

可变参数

可变参数用于应对函数参数个数不确定的情况,当然这种情况也可以不嫌麻烦地把参数作为list或tuple传进来。定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。

# 参数作为list或tuple传进来
# 定义
def calc(numbers):
    sum=0
    for n in numbers:
        sum = sum+n*n
    return sum
# 调用
calc([1, 2, 3])
calc((1, 2, 3))

# 利用可变参数的方法
# 定义
def calc(*numbers):  # 其实在函数内部,参数numbers接收到的是一个tuple。
    sum=0
    for n in numbers:  
        sum = sum+n*n
    return sum
# 调用
calc(12)  # 输出:5
calc()       # 输出:0
nums = [1, 2, 3]   
calc(*nums)  # 如果已经有了一个list或tuple,则直接在前面加一个*号即可把list或tuple的元素变成可变参数传进去

关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

# 定义
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

# 调用
person('Bob', 30)  # 输出:name:Bob age:30 other:{}
person('Bob', 30, city='Beijing')  # 输出:name:Bob age:30 other:{'city':'Beijig'}
person('Bob', 30, gender='M', city='Beijing')  # 输出:name:Bob age:30 other:{'gender':'M', 'city':'Beijig'}
extra = {'gender':'M', 'city':'Beijig'}
person('Bob', 30, **extra)  # 输出:name:Bob age:30 other:{'gender':'M', 'city':'Beijig'}

使用dir()

dir()返回一个对象的所有属性和方法。类似__xxx__ 这样的变量是特殊变量,一般都有特殊用途;我们自己的变量一般不要用这种变量名,类似_xxx__xxx这样的变量或函数是非公开的(private),不应该直接被外部引用。

>>> dir('ABC')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

list使用

list.append(x):尾部添加元素;
list.extend(L):尾部合并list;
list.insert(i, x):在索引i前添加x;
list.remove(x):移除列表中第一个值为x的元素;
list.pop([i]):移除列表中位置i的元素,并返回其值;
list.index(x):返回第一个值为x的索引;
list.count(x):x出现的次数;
list.sort(cmp=None, key=None, reverse=False):排序(in place);
list.reverse():逆序(in place)。

切片Slicing

语法格式: [ <first element to include> : <first element to exclude> : <step> ]

nums = range(5)

迭代Iteration

给定一个list或tuple,我们可以使用for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。

animals = ['cat','dog','monkey']
for animal in animals:
    print(animal)
# 输出: 
cat
dog
monkey

当然python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。比如:dict,dict迭代的是key;如果要迭代value,可以用for value in d.values();如果要同时迭代key和value,可以用for k,v in d.items()
字符串也是可迭代对象。可以通过collections模块的Iterable类型判断一个对象是否为可迭代对象。

form collections import Iterable
isinstance('abc', Iterable)  #str是否可迭代

python内置的enumerate函数可以把一个list变成索引-元素对。

animals = ['cat','dog','monkey']
for idx,animal in enumerate(animals):
    print(animal)
# 输出: 
cat
dog
monkey

python内置的zip()函数可以把一系列可迭代对象中对应的元素打包成一个个tuple(元组),并返回由这些tuple组成的list(列表)。

a = [1,2,3]
b = [4,5,6]
zipped = zip(a,b)
# 输出: 
[(1, 4), (2, 5), (3, 6)]

列表生成式List comprehension

语法格式: new_list = [expression(i) for i in old_list if filter(i)]

nums = [0, 1, 2, 3, 4]
even_squares = [x**2 for x in nums if x%2==0]
print(even_squares)
for idx,animal in enumerate(animals):
    print(animal)
# 输出: 
[0, 4, 16]

生成器generator

通过列表生成式,我们可以直接创建一个列表。但受内存等其他限制,python中有一种机制generator,我们可以在循环的过程中不断推算后续的元素。

# generator的创建方法一:只要把一个列表生成式的[]改成(),就创建了一个generator
g = (x * x for x in range(10))
# 打印
next(g)
# generator也是可迭代对象
for n in g:
    print(n)
#generator的创建方法二:如果一个函数内包含yield关键字,那么这个函数就是一个generator。示例fib数列:
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a+b
        n = n+1
    return 'done'

lambda表达式

匿名函数,通常是在需要一个函数但是又不想费神去命名一个函数的场合下使用。
语法格式:lambda 参数:expression(i)

# 匿名函数也可以是一个函数对象,把匿名函数赋给一个变量,再利用变量来调用该函数。
f=lambda x: x*x
f(5)
# 输出
25

lambda有个限制,就是只有一个表达式,不用写return,返回值就是该表达式的结果。

sys.stdout和sys.stdin

参考:Python 标准输出 sys.stdout 重定向

Python join()方法

Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

>>> str = "-";
>>> seq = ("a", "b", "c"); # 字符串序列
>>> print(str.join(seq))
a-b-c

os.path模块

os.path模块里有很多关于路径的实用操作,详见:os.path — Common pathname manipulations。其中最常中的当属os.path.join()了,其作用是将一个或多个路径正确地连接起来。

argparse模块

argparse模块用来读取命令行参数,也可以跟json模块配合读取配置文件啦。

parser = argparse.ArgumentParser(description='please input the configfile name.')
parser.add_argument('--configfile',type=str,default='conf/train.cfg',help = 'the configfile path')
args = parser.parse_args()
with open(args.configfile, 'r') as f:
    jsonconfig=json.load(f)

参考:http://blog.csdn.net/majianfei1023/article/details/49954705

常用操作时间复杂度

参见:https://wiki.python.org/moin/TimeComplexity

super()方法

主要用于在子类中调用父类的某个已经被覆盖的方法,最常用于子类的__init__()函数。
参见:8.7 调用父类方法

猜你喜欢

转载自blog.csdn.net/NNNNNNNNNNNNY/article/details/70739614