Python学习/复习神器-->各种方法/技巧在哪用和典型例子(一)

栏目: Python · 发布时间: 6年前

内容简介:Python学习/复习神器-->各种方法/技巧在哪用和典型例子(一)

就我个人在学习 Python 的过程中,经常会出现学习了新方法后,如果隔上几天不用,就忘了的情况,或者刚学习的更好的方法没有得到应用,还是沿用已有的方法,这样很不利于学习和掌握新姿势,从而拉长学习时间,增加学习成本。

为此,我觉得有必要把各种方法或者技巧的用处和其典型例子记录下来,方便在空闲时间翻阅,并在实操上合理应用,对提高掌握新姿势的效率会很有好处。

注意:以下基于Python3

基础篇

一、数据类型

1.list中增加元素,追加元素到末尾:list. append (‘元素’)、插入到指定的位置:list. insert (‘索引号’,‘元素’);删除末尾的元素:list. pop 、删除指定位置的元素:list. pop (‘索引号’)

2.input()返回的数据类型是 str

3.迭代/循环: for x in ...   把每个元素代入变量 x ,然后执行缩进块的语句

4.dict中避免key不存在的错误2种方法,1、通过 in 判断key是否存在:'Jia' in dict  返回Ture或False   2、通过dict提供的get()方法:dict.get('Yannan');删除元素:dict. pop(key)

5.set:和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。要创建一个set,需要提供一个list作为输入集合: s = set([1,2,3]).

添加元素: s.add(key)   删除元素: s.remove(key)。 set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:交集&    并集 |

6.列表倒序方法:list = [3,5,4] list.sort() >>[3,4,5]

7.字符串的元素替代方法:s = 'abc'  s. replace ('a','A')   >>'Abc'    谨记变量s仍是'abc'   原因是 replace 方法创建了一个新的字符串'Abc'

二、函数

1.函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:ads(-100) >>100 a = abs   a(-67) >>67

2.空函数

1 def nop():
2     pass

pass语句什么都不做,那有什么用?实际上 pass 可以用来作为 占位符 ,比如现在还没想好怎么写函数的代码,就可以先放一个 pass ,让代码能运行起来。

pass还可以用在其他语句里,比如:

1 if age >=18:
2     pass

缺少了pass,代码运行就会有语法错误。

3.函数可以同时返回多个值,但其实就是一个 tuple

4.函数执行完毕也没有return语句时,自动return None

5.如果有必要,可以 先对参数的数据类型做检查

6.除了正常定义的 必选参数 外,还可以使用 默认参数可变参数、 关键字参数和 命名关键字参数 ,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码

7.计算x的n次方的方法,使用while循环

1 def power(x, n):
2     s = 1
3     while n > 0:
4         n = n - 1
5         s = s * x
6     return s

8. 可变参数   计算a2 + b2 + c2 + ……

1 def calc(*numbers):
2     sum = 0
3     for n in numbers:
4         sum = sum + n * n
5     return sum

9.关键字参数   

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

1 def person(name, age, **kw):
2     print('name:', name, 'age:', age, 'other:', kw)

关键字参数有什么用?它可以扩展函数的功能。比如,在 person 函数里,我们保证能接收到 nameage 这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

10. 命名关键字参数     命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。

1 def person(name, age, *, city, job):
2     print(name, age, city, job)

和关键字参数 **kw 不同,命名关键字参数需要一个特殊分隔符 ** 后面的参数被视为命名关键字参数

11.递归函数   计算阶乘 n!

1 def fact(n):
2     if n==1:
3         return 1
4     return n * fact(n - 1)

递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。缺点是过深的调用会导致栈溢出。

12.切片

L[0:3] 表示,从索引 0 开始取,直到索引 3 为止,但不包括索引 3 。即索引 012 ,正好是3个元素。

L = list(range(10))  >>L[:9:2]  >>[0, 2, 4, 6, 8]    第三个数字是步长

13.迭代

在Python中,迭代是通过 for ... in 来完成的

迭代dict中的key、value、key和value: for key in dict、for value in d.values()、for k,v in d.items()

如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

>>> from collections import Iterable
>>> isinstance('abc', Iterable)      # str 是否可迭代
True
>>> isinstance([1,2,3], Iterable)   # list 是否可迭代
True  
>>> isinstance(123, Iterable)        # 整数 是否可迭代
False

14.列表生成式

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

运用列表生成式,可以写出非常简洁的代码。例如, 列出当前目录下的所有文件和目录名 ,可以通过一行代码实现:

>>> import os # 导入os模块
>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录

打印dict中的 key=value,并输出一个列表:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

把一个list中所有的字符串变成小写:

>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

15.生成器

g = (x * x for x in range(10))
>>> next(g)
0
>>> next(g)
1

generator保存的是算法,每次调用 next(g) ,就计算出 g 的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出 StopIteration 的错误。

当然,上面这种不断调用 next(g) 实在是太变态了,正确的方法是使用 for 循环 ,因为generator也是 可迭代对象

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)

所以,我们创建了一个generator后,基本上永远不会调用 next() ,而是通过 for 循环来迭代它,并且不需要关心 StopIteration 的错误。

斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

1 def fib(max):
2     n, a, b = 0, 0, 1
3     while n < max:
4         print(b)
5         a, b = b, a + b
6         n = n + 1
7     return 'done'

16.迭代器

生成器都是 Iterator 对象,但 listdictstr 虽然是 Iterable(可迭代对象) ,却不是 Iterator(迭代器)

listdictstrIterable 变成 Iterator 可以使用 iter() 函数:

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

凡是可作用于 for 循环的对象都是 Iterable 类型;

凡是可作用于 next() 函数的对象都是 Iterator 类型,它们表示一个惰性计算的序列;

集合数据类型如 listdictstr 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个 Iterator 对象。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Reality Is Broken

Reality Is Broken

Jane McGonigal / Penguin Press HC, The / 2011-1-20 / USD 26.95

Visionary game designer Jane McGonigal reveals how we can harness the power of games to solve real-world problems and boost global happiness. More than 174 million Americans are gamers, and......一起来看看 《Reality Is Broken》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具