zoukankan      html  css  js  c++  java
  • Python学习总结

    为什么学习python?

    1)之前一直有学习python的想法,在Java和Python之间,我之前的选择是Java,因为时间和精力有限,就选择了一个方向,深入下去。

    2)空闲时间实在太多,处理完日常工作,又分出考各种证书的学习时间,还有富裕。干点啥呢,学习python吧。

    3)总是听说python在表格处理/自动化运维/网络爬虫/人工智能等领域有对应的实践,那就学习一下呗,所谓技多不压身。

    话不多说,开始学习!

    第一部分-类型和表达式部分

    【注意】:2.7版本之后,print "xxx" 要换成 print("xxx")

    Hello,world!

    >>> print("Hello world!")
    Hello world!

    两个数相乘

    >>> print(3*6)
    18

    变量定义

    smart_city="网研院"
    print(smart_city)
    smart_city="智研院"
    print(smart_city)

    【注意】这里的smart_city = "xxxx"不叫变量赋值,而叫变量绑定,python维护了一个符号表(变量名)以及符合对应的值,这个对应关系就叫做绑定,一个符号可以绑定任意类型的值。

    两数相乘

    x = input()
    y = input()
    
    print(int(x) * int(y))

    【注意】input()函数输入的是字符串格式,所以自己在键盘输入的整数其实并不是正整数,而是字符串形式。所以在执行语句x*y会报错。因为x和y都是字符串形式,不可以相乘。

    所以需要进行强制转换。

    函数定义

    #函数定义
    def bi_smart():
        print("联通智能城市研究院")
    
    bi_smart()

    强制类型转换

    #强制类型转换
    print(1+int("1"))
    print(str(1)+"1")

    输出:

    2
    11

    【注意】:int对字符串进行转换时,要求字符类型是整数int('1'),或者输入的是纯数字 int(1.1),而不能是int('1.1')这种类型,否则就会报错如下:

    ValueError: invalid literal for int() with base 10: '1.1'

    字符串

    1)python三引号

    #字符串:Python 中三引号可以将复杂的字符串进行赋值,三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
    print('''python
    学习
    路线''')

    输出

    python
    学习
    路线

    2)原始字符串

    #原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
    print(r'python 学习cd	')

    输出

    python 学习cd	

     3)带转义字符的字符串

    #带转义字符的字符串
    print('python 学习
    路线')

    输出

    python 学习
    路线

    序列

    1)列表

    列表特点:

    #列表:列表的数据项不需要具有相同的类型,并且列表是可变的
    L1=['abc',1,True,"python"]

    增删改查基本操作:

    #访问列表中的值,索引访问
    L=['abc',1,True,"python"]
    print(L[1])
    print(L[1:])
    print(L[1:3])
    #更新列表元素
    L.append("Tom")
    #删除列表元素
    del L[1]
    #分片删除
    del L[3:]
    #分片赋值
    L[1:3]=['1','abc',1992]

    脚本操作符

    #脚本操作符:列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表
    
    #操作符"+",组合
    L1=[1,2,3]
    L2=[4,5,6]
    L3=L1+L2
    print("列表之间+组合:")
    print(L3)
    #列表长度函数,长度
    print("列表L1的长度:")
    print(len(L1))
    #操作符"*",重复
    L4=["smart_city"]
    print("重复:")
    print(L4*4)
    #元素是否在列表中
    print("判断元素7是否在列表L1中")
    print(7 in L1)
    #迭代
    print("列表L1迭代输出")
    for x in L1:print(x)

    输出

    列表之间+组合:
    [1, 2, 3, 4, 5, 6]
    列表L1的长度:
    3
    重复:
    ['smart_city', 'smart_city', 'smart_city', 'smart_city']
    判断元素7是否在列表L1中
    False
    列表L1迭代输出
    1
    2
    3

    python列表函数&方法

    #python列表函数&方法
    
    #比较两个列表的元素:python2中的函数cmp,但是在python3中已经不存在该函数,需要引入operator模块
    import operator
    L1=[1,2,3]
    L2=[4,5,6]
    #判断列表是否相等
    print(operator.eq(L1,L2))
    #判断列表的大小关系:lt(小于)/le(小于等于)/gt(大于)/ge(大于等于)
    print(operator.__lt__(L1,L2))
    
    #max函数:返回列表中最大的元素
    print(max(L1))
    
    #min函数:返回列表中最小的元素
    print(min(L1))

    2)元组

    特点:不可变

    #元组(tuple):Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
    t1=(1,2,3)
    print(t1)
    #逗号引发的python编译问题,Python具备返回多个值的特性,所以每当我们在一个函数或者方法中返回多个值时,这些值就会被打包成一个元组进行返回
    
    Tuple=[1,2,3],
    print(Tuple)
    输出:因为一个逗号的存在,列表变成了元组返回
    ([1, 2, 3],)

    3)字符串:python字符串格式化

    #python字符串格式化,Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,
    #但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
    
    print("学习%s的过程,%s下去" % ("python","坚持"))

    输出:

    学习python的过程,坚持下去

    4)字典:针对字典dict的操作原理同list/tuple基本一致

    """ Python字段dict:字典是另一种可变容器模型,且可存储任意类型对象。
    字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
    d = {key1 : value1, key2 : value2 }
     """
    d={'a':1,'b':2,'c':3}
    #打印字典中所有元素
    print(d)
    #打印字典中对应键的值
    print(d['a'])
    #根据键删除字典中的元素
    del d['a']
    print(d)

    Python序列解包

    #python序列解包,实用的python语法糖
    >>> x,y,z=1,2,3
    >>> print(x)
    1
    #*获取的值默认是list
    >>> a,b,*c=1,2,3,4
    >>> print(c)
    [3, 4]
    #如果左值比右值要多,那么带*的变量默认为空
    >>> A,B,C,*D=1,2,3
    >>> print(D)
    []

    bool值&bool运算

    #bool运算
    print(1<2 and 10>11)
    
    #bool值:bool()函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。
    #bool是int 的子类。
    #1.当对数字使用bool函数时,0返回假(False),任何其他值都返回真。
    print(bool(0))
    print(bool(1))
    #2.当对字符串使用bool函数时,对于没有值的字符串(也就是None或者空字符串)返回False,否则返回True。
    print(bool())
    print(bool(None))
    print(bool("abc"))
    #3.bool函数对于空的列表,字典和元祖返回False,否则返回True。
    print(bool([]))
    a=[]
    a.append("1")
    print(bool(a))
    #4.用bool函数来判断一个值是否已经被设置。
    x = input('Please enter a number :')
    print(bool(x.strip()))

    python语句块

    #语句块。:开始语法块,缩进的所有内容都是一个语法块
    if(10>1):
        print("YES")
    else:
        print("NO")

    python三元表达式

    #python中的三元表达式,python中没有其他语言中的三元表达式,不过有类似的实现方法
    a=1
    b=2
    c=""
    c="YES" if a<b else "NO"
    print(c)

    相等比较

    #运算符"=="和"is"的差别:==比较的是内容,is比较的是引用。
    a=[1,2,3]
    b=a
    c=[1,2,3]
    print(a==b)
    print(a==c)
    print(a is b)
    print(a is c)

    输出

    True
    True
    True
    False

    循环

    #循环:for循环类似C#的foreach,注意for后面是没有括号的,python真是能简洁就尽量简洁。
    for x in range(1,3):
        print(x)
    
    for key in {"a":1,"b":2}:
        print(key)
    
    for key, value in {"a":1,"b":2}.items():
        print(key,value)
    
    for x,y,z in [[1,2,3],['a','b','c']]:
        print(x,y,z)

    输出

    1
    2
    a
    b
    a 1
    b 2
    1 2 3
    a b c

     pass、exec和eval

    #pass、exec和eval
    
    
    """ exec 执行储存在字符串或文件中的 Python 语句。
    
    语法:exec(object[, globals[, locals]])
    
    参数:
    object:表示需要被指定的Python代码
    globals:表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。
    locals:表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值。
    """
    
    exec('print(x)',{"x":"abc"})
    
    #eval:可以把字符串里的字符转换为可执行代码,但只支持一行字符。可以返回执行后得到的值
    
    print(eval('1+2+3+4+5'))
    
    #Python pass 是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。
    #如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。
    
    def passFuc():
        pass
    
    for x in range(1,10):
        if(x==5):
            print(x)
        else:
            passFuc

    输出:

    abc
    15
    5

     


     

    第二部分-函数

    形参和实参之间是按值传递的,当然有些类型的值是引用(对象、列表和字典等)

    #函数部分
    
    #基本函数定义:
    def func():
        print("Hello,python")
    
    func()
    
    #带单一返回值的函数
    
    def funcWithSingleReturn():
        return "funcWithDataReturn"
    
    print(funcWithSingleReturn())
    
    #带多个返回值的函数
    def funcWithMultiReturn():
        return "funcWithDataMultiReturn1,funcWithDataMultiReturn2"
    print(funcWithMultiReturn())
    
    #包含两个参数的函数
    def funcWithTwoParams(x,y):
        print(x,y)
    funcWithTwoParams(1,2)
    
    #形参和实参数量不一致的函数
    def funcUncatchNumParams(x,y,*rest):
        print(x,y,*rest)
    funcUncatchNumParams(1,2,3,4,5)
    
    #命名参数函数
    
    def funcWithName(x,y,z):
        print(x,y,z)
    funcWithName(x=1,y=2,z=3)
    
    #参数中包含默认值的函数
    def funcWithDefaultParam(x,y,z=3):
        print(x,y,z)
    funcWithDefaultParam(5,4)
    
    #收集命名参数
    def func_with_collection_rest_naned_parameters(*args, **named_agrs):
        print(args)
        print(named_agrs)
    
    func_with_collection_rest_naned_parameters(1, 2, 3, x = 4, y = 5, z = 6)
    
    #集合扁平化
    func_with_collection_rest_naned_parameters([1, 2, 3], {"x": 4, "y": 4, "z": 6}) #这会导致args[0]指向第一个实参,args[1]指向第二个实参。
    func_with_collection_rest_naned_parameters(*[1, 2, 3], **{"x": 4, "y": 4, "z": 6}) #这里的执行相当于func_with_collection_rest_naned_parameters(1, 2, 3, x = 4, y = 5, z = 6)。

     

    第三部分-作用域

    #函数作用域
    
    #局部变量,只有函数执行才会开启一个作用域,输出:1
    
    if(2>1):
         x=1
    print(x)
    
    #使用vars()函数可以访问当前作用域的变量,输出:2
    y=2
    print(vars()['y'])
    
    #局部变量会覆盖隐藏全局变量
    #使用global定义变量,可以访问全局变量,输出分别是1和2,因为global修饰了a,此时print输出的全局变量1,但是函数内部又进行了更改,所以在外部输出的是2
    #这样也就解决了,在函数内部想使用全局变量,使用之后又再赋值之后外部进行输出或者另作他用
    
    a=1
    def funcWithGlobalVar():
        global a
        print(a)
        a=2
    
    funcWithGlobalVar()
    print(a)
        
    #locals() 函数会以字典类型返回当前位置的全部局部变量。输出:{'args': 2, 'x': 1}
    
    def funcWithLocalVar(args):
        x=1
        print(locals())
    funcWithLocalVar(2)
    
    
    #每个函数定义时都会记住所在的作用域。
    #函数执行的时候会开启一个新的作用域,函数内变量访问的规则是:先访问当前作用域,如果没有就访问函数定义时的作用域,递归直到全局作用域。
    
    
    b=1
    def funcWithNewArea():
        c=2
        print(b,c)
    
    #如果在当前作用域出现了b=2赋值语句,则输出的是2,2;如果去掉下面这行赋值语句,会去函数定义的作用域去查找b的值,因为函数定义时也没有赋值,此时会递归到全局作用域,输出的时1,2
    b=2
    funcWithNewArea()
    
    
    #变量访问的始终是当前作用域
    
    x=1
    def funcWithCurrentVar():
        x,y=2,3
        print(x,y)
    
    funcWithCurrentVar()#输出(2,3)
    
    print(x)#输出1
    
    
    #Python闭包:关于闭包的解释,来自:https://www.cnblogs.com/s-1314-521/p/9763376.html
    
    #a和b都是外函数的临时变量
    def outer(a):
        b=10
        def inner():
            print("python闭包:",a+b)
        #外函数返回内函数的引用
        return inner
    
    demo=outer(5)
    #demo存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数
    demo()
    
    
    
    ##函数作为对象
    def func(fn, arg):
        fn(arg)
    
    func(print, "hello")
    func(lambda arg : print(arg), "hi")

    第四部分-模块

    【定义】:在Python中,一个.py文件就称之为一个模块(Module)

    【使用模块的好处】:

     1) 大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

     2) 使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突

    #a.py
    print (__name__)
    def say_a():
        print("a")

    在另一个文件中引入模块a:

    #b.py
    #这种引入方式,破坏了对命名空间的管理
    from a import *
    
    def say_b():
        a.say_a()
        print("b")
    
    
    print (__name__)
    #此处,模块a是被import之后调用,所以__name__属性的值是文件名a
    print(a.__name__)

    最后,在demo.py中引入模块b,调用a中的函数

    #demo.py
    import b
    
    print(__name__)
    
    
    print("分割线------")
    b.say_b()
    b.say_a()
    b.a.say_a()

    【注意】:"_name"属性,如果当前文件主动运行,该值为"__main__",如果是被其他模块引入,比如在b.py文件中那样,print("a.__name__"),输出的是a模块的名字"a";


    第五部分-异常管理

    #异常
    
    #自定义异常:必须继承于BaseException
    
    class SmartException(BaseException):
        print("smart_exception")
    
    #引发和捕获异常
    
    try:
        raise SmartException
    
    except:
        print("捕获SmartException异常")
    
    #捕获多种异常
    try:
        raise SmartException
    except(SmartException,NameError):
        print("捕获多种异常")
    
    #访问异常实例
    
    try:
        raise SmartException("访问异常实例")
    except(SmartException,NameError) as e:
        print(e)
    
    #按类型捕获异常
    try:
        raise SmartException
    except SmartException:
        print("SmartException")
    except TypeError:
        print("typeError")
    
    #try-except-else-finally
    
    try:
        pass
    except :
        print("try-except-else-finally")
    else:
        print("else结构")
    finally:
        print("总会执行finally")

    第六部分-面向对象编程

    这部分内容整合自:面向对象编程 - 廖雪峰的官方网站 (liaoxuefeng.com)

    未完待续~~~~~~~

  • 相关阅读:
    关于MySQL数据库中null的那些事
    Java集合之Collections 剖析
    字符串类
    C++标准库
    << 操作符
    操作符的重载
    类中的重载
    友元
    二阶构造模式
    静态成员函数
  • 原文地址:https://www.cnblogs.com/ysw-go/p/13902026.html
Copyright © 2011-2022 走看看