zoukankan      html  css  js  c++  java
  • Python总结(二)

      学习一门语言,首先就要学习它的数据类型和语法。这里与JS进行对比学习。

    1.数据类型

      python的数据类型有:数字(int)、浮点(float)、字符串(str),列表(list)、元组(tuple)、字典(dict)、集合(set),除此之外,还有布尔(bool)、空(None)

      应用:判断变量的类型:

      (1)isinstance(变量名,类型)

      eg:isinstance(1,int)

      (2)通过与其他已知类型的常量进行对比(type)

      eg:a=100;type(a)==type(1)

      

      详见:https://github.com/MRlijiawei/algorithms/blob/master/others/python%E6%96%B9%E6%B3%95%E5%B0%81%E8%A3%85.py

      isinstance() 与 type() 区别:

        type() 不会认为子类是一种父类类型,不考虑继承关系。

        isinstance() 会认为子类是一种父类类型,考虑继承关系。

      如果要判断两个类型是否相同推荐使用 isinstance()。

      需要注意的还有,python的true和false是首字母大写的True和False。

    2.字符串编码

      python的字符编码有GB2312(中文)、ASCII(机器)、Unicode(多语言支持)、UTF-8。

      在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。如下图:

      

    3.python字符串及其格式化

      python3字符串是以Unicode编码的。Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。Python对bytes类型的数据用带b前缀的单引号或双引号表示。

    >>> ord('A')
    65
    >>> ord('')
    20013
    >>> chr(66)
    'B'
    >>> chr(25991)
    ''
    >>> 'u4e2du6587'
    '中文'

    x = b'ABC'

      以Unicode表示的str通过encode()方法可以编码为指定的bytes,反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

    >>> 'ABC'.encode('ascii')
    b'ABC'
    >>> '中文'.encode('utf-8')
    b'xe4xb8xadxe6x96x87'

    >>> b'ABC'.decode('ascii') 'ABC' >>> b'xe4xb8xadxe6x96x87'.decode('utf-8') '中文' >>> b'xe4xb8xadxff'.decode('utf-8', errors='ignore') ''

      此外,计算字符长度,python中使用len(),相当于js的.length。

      保存为utf-8编码,文件开头注释如下:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-

      格式化:有两种,%占位符和format。

      (1)%:%d--整数,%s--字符串,%f--浮点数,%x--十六进制数。(%%--就是%)

    >>> 'Hello, %s' % 'world'
    'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
    'Hi, Michael, you have $1000000.'

      其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

    print('%4d-%03d' % (3, 1))
    print('%.2f' % 3.1415926)

       3-001 
    3.14

      (2)format

    >>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
    'Hello, 小明, 成绩提升了 17.1%'

      注意%的优先级不比*低。

    4.list和tuple

      list和js的Array非常类似。不同的是,list可以使用下标-n来取倒数第n个元素。在内置方法上也有所不同。Array插入是push,list从末尾插入是append,从中间插入是insert(index, el)。末尾删除都是pop,但list的pop方法可以接收一个参数以删除指定位置元素。其余方法如sort(),基本相同。

      而tuple元组,是不可以被改变的list。因而会使其值发生改变的方法将不适用。这里的不变,指的是元素的指向不变。如果元素指向的值发生了变化,则tuple会发生变化。比如,tuple里包含了一个list,则这个list是可变的。list用[],tuple用()。

      需要注意的是,tuple如果只有一个元素,需要加一个逗号。a = (1) #1;  a = (1,)#(1,)

    5.if条件语句

      python的if语义上与JS的相同,只是表示方法上有所不同。比如,js是要将条件语句括起来,然后执行体用花括号括起来;而python则是使用冒号和缩进来表示关系。js里的else if,在python中是elif,如下:

    age = 20
    if age >= 6:
        print('teenager')
    elif age >= 18:
        print('adult')
    else:
        print('kid')

      输入输出:python中是input()和print。input如果带参数,则参数是输入提示;print同console.log。如:birth = input('birth: ')

    6.循环语句

      python的循环有两种:for...in...:和while...:。同样,python的循环有break和continue两个标识符。

    7.dict和set

      dict(字典)类似map对象。

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    >>> d['Michael']
    95

      因而同样,dict可以使用in,如:

    //js
    1 in [1,2]
    'a' in {'a':1}
    #python
    'a' in {'a':1}

      此外,不同的是,python字典可以get(key)可以达到类似的效果。如果key不存在,可以返回None,或者自己指定的value,如d.get('Thomas')  d.get('Thomas', -1)#不存在返回指定的-1。返回None的时候Python的交互环境不显示结果。

      还可以pop(key)删除。

      set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。要创建一个set,需要提供一个list作为输入集合,如:

    >>> s = set([1, 1, 2, 2, 3, 3])
    >>> s
    {1, 2, 3}

      set会自动过滤重复元素。add(key)添加,remove(key)删除。set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。

    8.函数方法

      一些基本的函数,比如js的Math下的相关函数,在python可以不必Math.就可以直接使用,如abs(),max()。此外还有hex(转为16进制),int(),str(),float(),bool()等。

      自定义函数,python的关键字是def。同样可以使用return且可以返回多个值。不同的是可以使用pass语句,来达到什么也不做处理的占位符效果。

    # -*- coding: utf-8 -*-
    # 计算一元二次方程的解
    import math
    
    def quadratic(a, b, c):
        if a == 0:
            return "a不能等于0"
        d = b*b - 4*a*c
        if d < 0:
            return "此方程无解"
        result1 = (-b + math.sqrt(d))/(2*a)
        result2 = (-b - math.sqrt(d))/(2*a)
        return result1, result
    #自定义抛出异常
    def my_abs(x):
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type')
        if x >= 0:
            return x
        else:
            return -x

    #默认参数
    import math def move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny

    #可变参数
    def calc(*numbers):
        sum = 0
        for n in numbers:
            sum = sum + n * n
        return sum
    #关键字参数
    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)

    >>> person('Bob', 35, city='Beijing')
    name: Bob age: 35 other: {'city': 'Beijing'}
    >>> person('Adam', 45, gender='M', job='Engineer')
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, **extra)
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
    #递归  汉诺塔
    # -*- coding: utf-8 -*-
    def move(n, a, b, c):

        if n == 1:
          print(a, '-->', c)
        else:
          move(n-1, a, c, b)
          move(1, a, b, c)
          move(n-1, b, a, c)

      此外还有命名关键字参数、参数组合等。https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

  • 相关阅读:
    k8s二进制部署
    k8s二进制部署
    k8s二进制部署
    k8s二进制部署
    微信小程序 学习笔记5 使用WeUI组件弹出对话框.
    微信小程序 学习笔记4 小程序API调用 wx.login
    微信小程序 学习笔记3 页面跳转
    微信小程序 学习笔记2 button
    微信小程序 学习笔记1 初识
    Python pyautogui 模拟鼠标键盘
  • 原文地址:https://www.cnblogs.com/ljwsyt/p/10572026.html
Copyright © 2011-2022 走看看