持续更新中
1、list,tuple,dict,set
- list为可变数组,内容可变,定义方式如下:[‘a’, ‘b’, 3, [4, 5] ]。
- tuple为不可变数组,内容不可变,定义方式如下:(‘a’, ‘b’, 3, [4, 5])。
- 只有一个数字的tuple是,需要使用a=(1 ,)方式定义,否则会识别为int型。
- dict为字典,可以主动修改key,定义方式如下:[‘a’:1, ‘b’:2, ‘c’:[4, 5]]
- set为不可存在重复选项的list
2、函数接收可变参数可使用如下方法
def calc(*numbers):
sum = 0
for i in numbers:
sum += i*i
return sum
print(calc(1,2,3,4))
3、函数接收关键字参数可使用如下方法
def info(name, age, **other):
print('name: ', name, 'age: ', age, 'other :', other)
extra = {'city': 'beijing', 'company': 'baidu'}
info('cheng', 25, city:'beijing', 'company':'baidu')
info('cheng', 25, **extra)
4、函数接收命名关键字参数可使用如下方法
def info2(name, age, *, city='fuzhou', company):
print(name, age, city, company)
info2('chengwei', 25, company='baidu')
其中*不需要传入,为标记,说明后面的参数为命名关键字参数,如果没有指定默认值,则该参数为必填参数。
如果已经存在可变参数,则这个*可以省略,如下
def info2(name, age, *args, city='fuzhou', company):
print(name, age, city, company)
info2('chengwei', 25, aaa, bbb, company='baidu')
5、参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数,如下
def info3(name, age, sex='male', *numbers, city='beijing', company, **other):
print(name, age, sex, numbers, city, company, other)
info3('cheng', 25, 'male', 1, 2, city='fuzhou', company='baidu', school='university')
6、对于任意的函数,都可以使用tuple与dict的组合来传入参数,如下
def info3(name, age, sex='male', *numbers, city='beijing', company, **other):
print(name, age, sex, numbers, city, company, other)
args = ('xing', 22, 'cheng', 1, 2)
kw = {'city': 'fuzhou', 'company': 'wangyi', 'school': 'highschool'}
info3(*args, **kw)
//输出 xing 22 cheng (1, 2) fuzhou wangyi {'school': 'highschool'}
7、python的切片功能,能够是用在list, tuple,str中,如下
>>> l = range(100)
>>> l[1:10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> l[:10:2]
[0, 2, 4, 6, 8]
>>> l[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
>>> t = (1,2,3,4,5,6)
>>> t[:3]
(1, 2, 3)
>>> s = "hello world"
>>> s[:5]
'hello'
#python中最简单的将字符串逆序输出的方法
>>> s
'12345'
>>> s[::-1]
'54321'
8、装饰器的使用
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import functools
def log(func):
def wrapper(*args, **kw):
print('call %s()' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def now():
print('2015-01-01')
now()
#此时now的__name__属性已经变成了wrapper
print(now.__name__)
def log2(text):
def decorator(func):
def wrapper(*args, **kw):
print('call %s(), %s' % (func.__name__, text))
return func(*args, **kw)
return wrapper
return decorator
@log2('hello world!')
def now2():
print('2015-01-02')
now2()
print(now2.__name__)
def log3(text):
def decorator(func):
#使用functools.wraps方法来修改wrapper的__name__属性
@functools.wraps(func)
def wrapper(*args, **kw):
print('call %s(), %s' % (func.__name__, text))
return func(*args, **kw)
return wrapper
return decorator
@log3('hello world!')
def now3():
print('2015-01-03')
now3()
print(now3.__name__)
def log4(text):
def decorator(func):
#使用functools.wraps方法来修改wrapper的__name__属性
@functools.wraps(func)
def wrapper(*args, **kw):
print('before call %s(), %s' % (func.__name__, text))
res = func(*args, **kw)
print('after call')
return res
return wrapper
return decorator
@log4('hello world!')
def now4():
print('2015-01-03')
now4()
# call now()
# 2015-01-01
# wrapper
# call now2(), hello world!
# 2015-01-02
# wrapper
# call now3(), hello world!
# 2015-01-03
# now3
# before call now4(), hello world!
# 2015-01-03
# after cal
9、高阶函数map,reduce,sorted
sorted的用法
#正常用法
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
#此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
>>> L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
>>> def sort_by_name(l):
... return l[0]
...
>>> sorted(L, key=sort_by_name)
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
>>> def sort_by_score(l):
... return l[1]
...
>>> sorted(L, key=sort_by_score)
[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
>>>