Python18

Python学习笔记(1)Python基础

2017-09-17  本文已影响23人  不掉发码农

中文学习网站: 廖雪峰的官网网站https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

1. Python基础

输入函数:input()

list与tuple

>>> t = (1)  #t是一个数,因为括号()既可以表示tuple,又可以表示数学公式中的小括号
1
>>> t = (1,)  #t是只有一个元素的tuple
(1,)

数据类型转换

>>> int('123')
123
>>> float('12.3')
12.3
>>> str(1.34)
'1.34'
>>> bool(-1)   #非零数值,非空list,tuple,非空字符串为True
True
>>> bool(0)
False
>>> bool([0])
True
>>> bool([])
False
>>> bool('')
False
>>> hex(18) #将一个整数转换为一个十六进制字符串 
'0x12'
>>> oct(18) #将一个整数转换为一个八进制字符串 
'022'
>>> ord('d') #将一个字符转换为它的整数值
100
>>> chr(100) #将一个整数转换为一个字符
'd'

数值操作

>>> 10.0//3  #地板除
3.0
>>> 10.0%3.5 #取余,支持浮点数
3.0
>>> 2**3 #乘方
8

切片操作

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[1:9:2]
[1, 3, 5, 7]
>>> a[1:9]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[::-1]   #list翻转
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

迭代遍历

可变参数

>>> def f(a,*b):
...     for i in b:
...             a+=i
...     return a
... 
>>> f(1,2,3,4)
10
>>> f(1)
1
>>> f(1,*[2,3,4]) #列表前面加*表示把列表转成可变参数传进去
10

关键字参数(Python3以上)

>>> def foo(a,b,**kw):
...     print(a,b,kw)
... 
>>> foo(1,2)
(1, 2, {})
>>> foo(1,2, key1=1, key2='a')
(1, 2, {'key2': 'a', 'key1': 1})
>>> foo(1,2, **extra)
(1, 2, {'city': 'Beijing', 'job': 'Engineer'})
>>> def person(name, age, *, city, job):
...     print(name, age, city, job)
... 
>>> person('Michael', 18, city="Beijing")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: person() missing 1 required keyword-only argument: 'job'
>>> person('Michael', 18, job="student", city="Beijing")
Michael 18 Beijing student

参数组合

def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

生成器

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
>>> def fib(max):
...    n, a, b = 0, 0, 1
...    while n < max:
...        yield b
...        a, b = b, a + b
...        n = n + 1
...    return 'done'
...
>>> f = fib(5)
>>> f
<generator object fib at 0x7f4c206597e0>
>>> for i in f:
...  print(i)
... 
1
1
2
3
5

Iterable与Iterator的区别

for x in [1, 2, 3, 4, 5]:
    pass

# 实际上完全等价于:

# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
    try:
        # 获得下一个值:
        x = next(it)
    except StopIteration:
        # 遇到StopIteration就退出循环
        break

函数也是一个变量

>>> def add(x, y, f):
...     return f(x) + f(y)
... 
>>> add(-2,3,abs)
5

map/reduce

  1. map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> map(str,a)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> map(lambda x:x**2+1,a)
[1, 2, 5, 10, 17, 26, 37, 50, 65, 82]
map(f,list)
#等价于
[f(x) for x in list]
  1. reduce()把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算, 其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

>>> def max(a,b):
...     return a if a>b else b
... 
>>> reduce(max,[3,4,1,-1,2])
4
#将字符串转整形
>>> d = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
>>> reduce(lambda x,y:x*10+y, map(lambda s:d[s], '54323'))
54323
  1. 总结: map(f, list), f接收一个参数, 对list中每个元素调用f; reduce(h, list), h接收两个参数, 迭代作用到list中的每个元素.
  2. filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
  1. sorted()函数对list进行排序

sorted(iterable[, cmp[, key[, reverse]]])

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

lambda表达式

f = lambda params_in: params_out

偏函数

functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
#创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数
>>> max2 = functools.partial(max, 10)
# 实际上会把10作为*args的一部分自动加到左边,也就是:
>>> max2(5, 6, 7)
#相当于:
#args = (10, 5, 6, 7)
#max(*args)
10
上一篇 下一篇

猜你喜欢

热点阅读