就我个人在学习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.空函数

 def nop():
     pass

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

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

 if age >=18:
     pass

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

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

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

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

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

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

 def power(x, n):
     s = 1
     while n > 0:
         n = n - 1
         s = s * x
     return s

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

 def calc(*numbers):
     sum = 0
     for n in numbers:
         sum = sum + n * n
     return sum

9.关键字参数   

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

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

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

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

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

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

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

 def fact(n):
     if n==1:
         return 1
     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, ...

 def fib(max):
     n, a, b = 0, 0, 1
     while n < max:
         print(b)
         a, b = b, a + b
         n = n + 1
     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对象。

Python学习/复习神器-->各种方法/技巧在哪用和典型例子(一)的更多相关文章

  1. Python--方法/技巧在哪用的典型例子

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

  2. Python学习笔记:魔术方法详解

    准备工作 为了确保类是新型类,应该把 _metaclass_=type 入到你的模块的最开始. class NewType(Object): mor_code_here class OldType: ...

  3. Python学习_数据排序方法

    Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2, ...

  4. python学习笔记之split()方法与with

    Python split()方法 以下内容摘自:http://www.runoob.com/python/att-string-split.html 描述 Python split()通过指定分隔符对 ...

  5. Python学习手册之内部方法、操作符重载和对象生命周期

    在上一篇文章中,我们介绍了 Python 的类和继承,现在我们介绍 Python 的内部方法.操作符重载和对象生命周期. 查看上一篇文章请点击:https://www.cnblogs.com/dust ...

  6. python学习历程之split()方法获取cmd mysql 结果集

    if __name__=='__main__': FServerId = raw_input("Please input source id:") GetFileKey(FServ ...

  7. Python学习_数据处理split方法

    用open方法导入文件“sketch.txt”后,用split()方法进行分割: >>> import os >>> os.chdir('C:/Python33/H ...

  8. python学习——复习

    一.基础知识: 1.文件操作有哪些模式?请简述各模式的作用. 'r' 读模式,相应的方法有 read(),readline(),readlines() 'w' 写模式,相应的方法有 write(),w ...

  9. Python学习之==>常用字符串方法

    1.常用字符串方法 a = '\n 字 符 串 \n\n' b = a.strip() # 默认去掉字符串两边的空格和换行符 c = a.lstrip() # 默认去掉字符串左边的空格和换行符 d = ...

随机推荐

  1. 5分钟把任意网站变成桌面软件--windows版

    本文源自于segmentfault的一篇专栏文章:https://segmentfault.com/a/1190000012924855  只不过这篇是MAC版本的,所以我试了下windows版的: ...

  2. 用IDEA/WebStrom 提交本地项目到Git/码云等

    以码云为例: 在码云上创建新的项目. webstrom/idea 打开本地项目

  3. python装饰器实现对异常代码出现进行监控

    异常,不应该存在,但是我们有时候会遇到这样的情况,比如我们监控服务器的时候,每一秒去采集一次信息,那么有一秒没有采集到我们想要的信息,但是下一秒采集到了, 而后每次的采集都能采集到,就那么一次采集不到 ...

  4. Intellij-@Override报错

    1.设置  File >> Project Structure >> Project 中设置Project language level如下: 2. 设置  File > ...

  5. linux_初始参数选择

    目前linux发行版? linux内核 : Linux Kernel2.2  2.4  2.6  3.x 发行版本: Red Hat 主流 6.x, 正在发展 7.x Fedora: 为Red Hat ...

  6. 移动端 -webkit-user-select:text; ios10 bug 解决方案

    移动端一般body的css.会设置 作用就不解释了: body{ height:100%;min-height:100%; font-family: "微软雅黑",'Helveti ...

  7. C# Linq基本常用用法

    1.什么是Linq? Lanaguage Interated Query(语言集成查询),Linq 是集成C# 和VB这些语言中用于提供数据查询能力的一个新特性. 这里只介绍两种基本常用用法. 学习方 ...

  8. Git分支管理[三]

    标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 git分支管理命令 git branch #创建分支 git branch -v # ...

  9. Java NIO之网络编程

    最近在研究Java NIO和netty,曾经一度感觉很吃力,根本原因还是对操作系统.TCP/IP.socket编程的理解不到位. 不禁感叹,还是当初逃的课太多. 假如上天给我一次机会,能够再回到意气风 ...

  10. 【COOKIE 与 SESSION】

    一.相关概念 cookie的出现,解决http协议无状态特性 由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. 举例: ...