美文网首页
Python 基础

Python 基础

作者: 李霖弢 | 来源:发表于2019-11-30 14:20 被阅读0次

    简介

    Python是强类型(不允许隐式转换)、动态类型语言(在执行时才检查变量类型,允许变量重新赋值为其他类型、为对象自定义添加属性)。

    基础语法

    • #或字符串表达单行注释,'''"""字符串表达多行注释,采用缩进(约定为四个空格)表达代码块,而非大括号{}
    # print absolute value of an integer:
    a = 100
    if a >= 0:
        print(a)
    else:
        print(-a)
    
    • 单行语句
      Python 通常是一行写完一条语句 , 或通过 ; 分隔在一行内显示多条语句
    • 多行语句
      使用\可实现多行语句
    total = item_one + \
            item_two + \
            item_three
    

    在 [], {}, 或 () 中的多行语句,不需要使用\,例如:

    total = ['item_one', 'item_two', 'item_three',
            'item_four', 'item_five']
    
    • 赋值
    a=10
    a,b,c=20,a+5,100
    print(a,b,c)#20 15 100
    d,e,f=(1,2,3)
    print(d,e,f)#1 2 3
    
    • 通过id(<变量名>)可以获取目标对象的内存地址

    数据类型

    • 数字 : 整数int(0x前缀表示十六进制)、浮点数float
    • 字符串str : 转义字符\n表示换行, r'...' 表示自然字符串(无视转义字符),'''...'''"""..."""表示多行内容(或注释),可以与r配合使用
    >>> print('''Line1
    Line2
    Line3''')
    

    等价于

    'Line 1\nLine 2\nLine 3'
    
    • 布尔值 bool
      True、False

      • 布尔运算
        and、or、not
    • 空值 None

    • bytes
      用带b前缀的单引号或双引号表示

    判别数据类型
    • isinstance()
      子类属于祖先类为真
      如判断100是否为数字
    isinstance(100, (int, float))#true
    
    • type()
    type(10)#<class 'int'>
    

    输出 print

    每次 print 输出默认是换行的,如果要实现不换行需要在变量末尾加上 end="":

    print( 'a', end=" " )
    print( 'b', end=" " )
    

    输入 input

    print ("请输入你的名字")
    name=input()
    print (name)
    

    四种数据结构(容器)

    1. 列表list

    • 类似js的Array
    • 使用负数当索引可以获取倒数的元素
    插入元素
    • .append(newItem)
    • .insert(index,newItem)
    删除元素
    • .pop(index)
      不传入index则默认删除末尾元素

    2. 元组 tuple

    • 元组比列表更省内存
    • 其中每个元素的指向不能改变,也不能新增/删除元素
    • 当只有一个元素时需加,否则()会被解析为数学公式的小括号
    t = (1,)
    

    3. dict 字典

    类似js中直接创建的对象,但各种类型都可以作为key,例如

    myDict = {threading.current_thread(): 100}
    print(myDict[threading.current_thread()])#100
    

    和list相比,dict查找/插入速度快,不会随着key的增加而变慢;但需要占用大量内存。

    myDict = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    myDict1 = dict('Michael'=95, 'Bob'=75, 'Tracy'=85)
    print(myDict == myDict1 )#True
    

    无法获取key不存在的字典值,可通过in.get()方法进行判断

    'tk' in myDict
    
    myDict['Thomas']
    myDict.get('Thomas')
    myDict.get('Thomas', -1)#设置默认值
    

    4. set 集合

    无序且不会有重复元素,只能以intstr等不可变对象作为键

    s = set([1, 2, 3])
    s = {1,2,3}
    
    • 可通过.add()新增元素,.remove()删除元素
    • 两个set可通过&取交集,|取并集
    • 无法被切片或索引

    比较

    ==类似js的==
    is类似js的===

    条件判断

    if <条件判断1>:
        <执行1>
    elif <条件判断2>:
        <执行2>
    else:
        <执行3>
    
    • 条件判断语句如为非布尔值,非零数值、非空字符串、非空list等视为True,否则为False
      其他情况下的语句不能支持隐式转换,如"5"+10
    • not 同js中的!
    if not 50>100:
        pass
    

    循环

    for循环

    for item in list:
        pass
    for index,item in enumerate(list):
        pass
    
    • enumerate
      把传入的list以(index,item)的形式打包成一个个元组,然后返回由这些元组组成的对象。可以使用 list() 转换enumerate对象以输出列表。
    >>>list(enumerate(['a','b']))
    [(0,'a'),(1,'b')]
    

    推导式(列表解析式、字典解析式、集合解析式)

    书写方便,且执行效率远远高于通过循环生成列表/字典/集合
    注意元组没有解析式,当使用()时会生成generator

    l = [i+1 for i in range(1,11) if i<5]
    #[2, 3, 4, 5]
    
    d = {i: j.upper() for i, j in zip(range(1, 3), 'abc')}
    #{1: 'A', 2: 'B', 3: 'C'}
    
    s = {x * x for x in range(10)}
    #{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
    
    • zip
      把传入的参数打包成一个个元组,然后返回由这些元组组成的对象,以节约内存。可以使用 list() 转换zip对象以输出列表。
    >>>list(zip(range(1, 3), 'abc'))
    [(1,''a'),(2,'b'),(3,'c')]
    

    while循环

    while <条件语句>:
        pass
    

    break

    退出循环

    continue

    提前结束本轮循环,直接开始下一轮循环

    函数

    def 函数名(参数):
      <函数体>
    
    • pass
      占位符,防止 条件执行/循环执行/函数体/类 为空时报错
      本身没有作用,不会影响后续代码执行
    • 默认return None返回值为tuple时可省略括号
    参数

    对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

    • 函数的参数可以设置默认值
      默认参数必须指向不变对象,否则每次调用都会指向上次调用结束时的默认值
    • 位置参数(必选参数)
      普通的参数称为位置参数,不可多传也不可少传(除非设置了默认值)
    • 可变参数 *
      类似ES6的...,自动将所有参数组装为一个tuple
    def calc(*numbers):
        sum = 0
        for n in numbers:
            sum = sum + n * n
        return sum
    calc(1, 2)#5
    calc(*[1,2])#5
    calc(*(1,2))#5
    calc()#0
    
    • 关键字参数 **
      自动将含参数名的参数组装为一个dict
    def person(name, age, **kw):
        return name, age, kw
    print(person('Adam', 45, gender='M', job='Engineer'))
    print(person('Adam', 45, **{'gender':'M', 'job':'Engineer'}))
    #(Adam , 45 , {'gender': 'M', 'job': 'Engineer'})
    
    • 命名关键字参数
      通过分隔符**后面的参数被视为命名关键字参数。
      类似位置参数,不可多传也不可少传(除非设置了默认值),区别在于必须传入参数名而非通过位置传入
    def person(name, age, *, city, job):
        print(name, age, city, job)
    person('Jack', 24, city='Beijing', job='Engineer')
    #Jack 24 Beijing Engineer
    
    • 参数组合
      必须按照 必选参数、默认参数、可变参数/命名关键字参数、关键字参数 的顺序定义参数
    def f1(a, b, c=0, *args, **kw):
        print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
    f1('aa','bb','cc','dd',args1=1,args2=2)
    #a = aa b = bb c = cc args = ('dd',) kw = {'args1': 1, 'args2': 2}
    

    相关文章

      网友评论

          本文标题:Python 基础

          本文链接:https://www.haomeiwen.com/subject/xebrsxtx.html