zoukankan      html  css  js  c++  java
  • Python之旅(Life is short, You need python)

    基础知识汇总

    ********************************************************************************************************************************************************************************************************************************

    一、python的优缺点

    优点:简单、易学、可移植性、可拓展性、可嵌入性、丰富的库、规范的代码;

    缺点:运行速度慢、代码不能加密、线程不能利用多CPU、可选架构太多。

    二、python2与python3的区别

    print&exec&repr

    1 python2:print&exec&repr是一个语句

    2 python3:print()&exec()&repr()是一个函数,接收字符串作为参数

    # py2
    >>> print("hello", "world")
    ('hello', 'world')
    # py3
    >>> print("hello", "world")
    hello world

    ------------------------------------------

    # py2
    >>> print("hello", "world")
    ('hello', 'world')
    >>>
    >>> from __future__ import print_function
    >>> print("hello", "world")
    hello world

    input:

    python2:raw_input()接收字符串,input()接收数字

    python3:input()接收的全部是字符串

    编码方式:

    python2:默认编码是ASCII码(若想使用中文:#_*_coding:utf-8_*_)

    python3:默认编码是utf-8,支持中文

    # py2
    >>> sys.getdefaultencoding()
    'ascii'

    # py3
    >>> sys.getdefaultencoding()
    'utf-8'

    字符串

    Python2:字符串有两个类型,一个是 unicode,一个是 str,前者表示文本字符串,后者表示字节序列;

    Python3: 中两者做了严格区分,分别用 str 表示字符串,byte 表示字节序列。

    True and False:

    Python2:True 和 False是两个全局变量(名字),在数值上分别对应 1 和 0,既然是变量,那么他们就可以指向其它对象;

    Python3:修正了这个缺陷,True 和 False 变为两个关键字,永远指向两个固定的对象,不允许再被重新赋值。

    变量:

    Python2:可以在函数里面可以用关键字 global 声明某个变量为全局变量,但是在嵌套函数中,想要给一个变量声明为非局部变量是没法实现的;

    Pyhon3:新增了关键字 nonlcoal,使得非局部变量成为可能。

    def func():
        c = 1
        def foo():
            c = 12
        foo()
        print(c)
    func()    #1

    可以对比上面两段代码的输出结果

    def func():
        c = 1
        def foo():
            nonlocal c
            c = 12
        foo()
        print(c)
    func()   # 12

    不等运算符:

    python2:可以使用!=或者><

    python3:只能使用!=

    创建迭代计数器:

    python2:xrange

    python3:range

    异常:

    python2:except Exception, e

    python3:except (Exception) as e

    整型:

    python2:存在long型

    python3:全部为int型

    修改语法:

    python2:字典的keys,values,items以及map,filter,reduce返回的都是一个列表

    python3:字典的keys,values,items以及map,filter,reduce返回一个可迭代对象

    继承:

    python2:默认经典类(新式类需要(object))

    python3:只有新式类

    二、基础语法知识

    1、语法

    函数:

    1、递归函数 n! = n *(n-1)* .....*2*1

    def  fact(n):

         if n == 1:

            return 1

        return fact(n-1)*n

    # 函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

       解决递归调用栈溢出的方法是通过尾递归优化--在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。

      <尾递归==循环>

    def fact(n):
        return fact_iter(n, 1)

    def fact_iter(num, res):
        if num == 1:
            return res
        return fact_iter(num - 1, num * res)

    迭代: list tuple dict

    字典的迭代(dictionary):

    默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

    如何判断是否可迭代:

    from collections import Iterable
    isinstance('abc', Iterable)

     列表生成器:

     list(range(1,8))

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

    [x * x for x in range(1, 11)  if x % 2 == 0]

    [m + n for m in 'ABC' for n in 'XYZ']--全排列

    [k + '=' + v for k, v in d.items()]--列表生成式也可以使用两个变量来生成list

    eg : 列出当前目录下的所有文件和目录名,可以通过一行代码实现

    d for d in os.listdir('.')]

    迭代器:一边循环 一边计算-- 不必创建完整的list,从而节省大量的空间

    要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

    g = (x * x for x in range(1, 11)  if x % 2 == 0)

    1 next(g)

    2 for n  in g:

        print(n)

    赋值语句:a, b = b, a + b  -->  t = (b,a+b)  a=t[0]  b=t[1]

    生成器:

    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

    可以使用isinstance()判断一个对象是否是Iterator对象。

    >>> from collections import Iterator
    >>> isinstance((x for x in range(10)), Iterator)

    生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。

    这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

    Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。


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

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

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

    Python的for循环本质上就是通过不断调用next()函数实现的,例如:

    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

    高阶函数:

    map() reduce()



  • 相关阅读:
    mysql操作规范
    在线修改大表结构pt-online-schema-change
    MySQL 过滤复制
    IDEA “Cannot resolve symbol” 解决办法
    JAVA NIO Selector Channel
    Mysql二级索引
    技术选型关于redis客户端选择
    知乎上看到的一篇讲解Epoll的文章,较形象生动
    linux安装运行virtuoso数据库的详细过程
    go安装步骤(linux和Windows)
  • 原文地址:https://www.cnblogs.com/hzr-notes/p/7469053.html
Copyright © 2011-2022 走看看