廖雪峰摘录

1 当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

# !/user/bin/env python3

# -*- coding:utf-8 -*-

第一行注释是为了告诉linux/os系统,这是个python可执行程序,windows系统会忽略

第二行注释是为了告诉python解释器,按照UTF-8编码读源代码,否则中文可能会乱码


2 格式化输出:

  %(a,b,c)

{0}{1:.1f}.format(a,b)


3 可以通过append追加元素在列表末尾,通过pop弹出最后一个元素,在pop里放数字弹出对应key的数

    tuple 对于单个元素的元组,可以通过(1,)来消除歧义


4 条件语句:

   if  clause:

         pass

   elif clasuse:

         pass

   else:

         pass


5 python内置字典dict在其他语言中成为map,使用key-value存储,具有极快的查找速度

   通过dict提供的get)方法,如果key不存在,返回None或者自己指定的值;删除一个key使用pop(key)

   对应的value也会被删除


   dict 有以下几个特点:

   1)查找和插入的速度极快,不会随着key的增加而变慢

   2)需要占用大量的内存,内存浪费多

   list有以下特点:

   1)查找和插入的时间随着元素的增加而增加

   2)占用空间小,内存浪费多

  

   set和dict类似,也是一组key集合,但是不存储value,但是它没有重复的key,通过add(key)方法可以增加元素到

   set中,通过remove(key)方法删除元素,set不可以放入可变对象,因为无法判断两个可变对象是否相等

   

6 空函数

  def nop():

        pass

  函数返回多个值其实是返回一个tuple

  

  位置参数:最普通的参数,

  默认参数:a=10,必选参数在前,默认参数在后,否则解释器会报错。当有多个参数时,把变化大的参数放在前面,

        变化小的参数放在后面,变化小的参数就可以作为默认参数。默认参数降低了函数调用的难度,而需要更复杂的

        调用时,又可以传递更多的参数来实现

  可变参数:*args。可以传入0个、一个以上的参数,或者元组和列表

  关键字参数:**kargs,可以传入字典,对于关键字参数,可以传入不受限制的数量,到底传入了什么参数就要在函数

  内部检查了,如果要限制关键字参数的名字,就可以使用命名关键字参数,这种的定义方式如下,在*后面写变量名

  def person(name,*,city):

        pass

  调用方式是person('Jack',city='beijing')

  如果函数中已经有一个可变参数,就不需要特殊分割符号*了,比如

  def person(name,*args,city)

  命名关键字参数具有默认值时,可不传入值,比如:

  def person(name,age,*,city='beijing',job):

       pass

  person('jack',24,job='engineer')

  

   位置参数,默认参数,可变参数,关键字参数和命名关键字参数,这五种组合都可以使用

  def func(a,b=0,*args,**kargs):pass

  def func(a,b=0,*,c,**kargs):pass

  def func(a,b=0,*args,c,**kargs):pass


7 如果一个函数在内部调用自身,则它就是递归函数。递归的优点是逻辑清晰,缺点是占用内存,

  要防止栈溢出,解决递归缺点的方法是通过尾递归优化。

  尾递归是指函数返回的时候调用自身,并且return语句不能包含表达式,这样解释器就可以把尾递归

  做优化,使递归本身无论调用多少次,都占用一个栈帧,不会出现栈溢出的情况

 遗憾的是大多数编程语言没有对尾递归做优化,所以即使写成尾递归形式,也会导致溢出。


8 列表切片操作:

  前三个元素:L[0:3]

  倒数第一个元素的索引L[-1]

  后十个数索引 L[-10:]

  前十个数,每两个取一个  l[ :10:2]

  所有的数,每5个取一个    l[ ::5]

  tuple  也是一种list,唯一区别是tuple不可变,字符串也是一种list,可以切片

  

for in,迭代

   for key in dict.keys() 迭代键

   for value in dict.values()  迭代值

   for k,v in dict.items()   迭代键值

    

10 列表生成式

     list(range(1,11))

     [x*x for x in range(1,11)]  

     [x*x for x in range(1,11)   if x%2 ==0] 用if语句筛选

     [m+n for m in range(1,11) for n in range(1,11)]

     

11 生成器

     生成器即一边循环一边计算的机制。生成方法有:

     1)将列表加()生成,

     2)直接在()用列表生成式生成

     3)使用yield关键字

12 迭代器

     直接作用于for循环的数据类型有以下几种:

     1)集合数据类型,如list、tuple、dict、set、str

     2)生成器


13 函数式编程

    变量可以指向函数,函数名也可以是变量,函数参数可以接收另一个函数作参数即成为了高阶函数

   

14 map/reduce

     由于map接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到

     序列的每一个元素并将结果作为新的Iterator返回。Iterator是惰性序列,因此通过list()函数把整个

     序列都计算出来并返回一个list

     reduce(f,list) 稍微复杂一点,先取够f需要的参数,然后然函数调用的结果作为第一个参数,继续

     在list中取够它所需要的参数,比如:

>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579

     filter(f,list),f作为筛选条件,将list中符合条件的筛选出来 。它也是一个迭代器,惰性序列,需要list()获得结果

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
     sorted() 函数也是一个高阶函数,它可以接收一个key函数 实现自定义的绝对值大小排序


15 函数作为返回值

    在函数A中定义了函数b,且函数b引用了外部函数a的参数和局部变量,当函数a返回函数b时

    ,相关参数和变量都保存在返回的函数中,这种称为闭包

16 匿名函数

    只能有一个表达式,不能写return,好处:因为没名字,不用担心命名冲突

17 装饰器

     在代码运行期间动态增加功能的方式,本质上是一以函数为参数,并返回函数的高阶函数。如果

    decorator本身需要传入参数,那就需要写一个返回decorator的高阶函数,写出来更复杂

18 偏函数

     使用functools。partial作用就是,把一个函数的某些参数给固定住,返回一个新的函数

19 模块

     python引入了目录来组织模块,称为package。

     自己创建模块时要注意命名,不要和系统的冲突,否则无法导入

     

    作用域

    _a

    __a

    __a__

    

    安装第三方模块,pip3,可以使用anaconda它集成了很多第三方包

    默认情况下,python解释器会搜索当前目录,所有已安装的内置模块和第三方模块,

    搜索路径放在sys模块的path变量中,如果要自己添加自己的搜索目录,有两种方法

   一是直接修改sys.path.append(path)添加要搜索的目录,这种方法在运行时修改,运行结束后失效

   二是设置环境变量PYTHONPATH,该环境变量的内容被自动添加到模块的搜索路径中,设置方式

   和path环境变量类似。

20 面向对象编程OOP 

   实例的访问限制,外部代码可以自由地修改一个实例的变量,如果要让一个内部变量不被外部访问

   ,可以把变量的名称前加上两个下划线__,则变量就成为一个私有变量,只有内部可以访问,

   然后如果外部代码要获取其变量代表的属性,那么可以给student类增加get_name和get_score方法

   如果要允许外部修改score,则可以给类增加set_score方法。 需要注意的是在python中,以双下划线    开始和双下划线结束的是特殊变量,特殊变量时可以直接访问的,

   python中__name__,__score__


    

    

   

    

    

     

     

     

    



  

 

  

  

 

  

   




  


   

   


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值