• python学习笔记(二)


    一、tuple和list数据类型

    共同点:

      都是有序集合,集合的元素类型可以是不同的数据类型;

      第1元素索引为0,都可以用 变量[索引] 这样方式访问元素。最后一个元素索引号也可以是-1表示,以此类推。

    不同点:list集合的元素可以改变,集合用[]括号;

               tuple集合不可以改变,集合用()括号。

    #list定义
    >>> classmates = ['Michael', 'Bob', 'Tracy']
    #tuple定义
    >>> classmates = ('Michael', 'Bob', 'Tracy')

    定义只有一个元素的tuple,必须要以,号末尾:

    >>> a=(1,)

    计算元素个数:

    >>> a = (1,2)
    >>> len(a)
    2

    list元素的操作:

    >>> classmates = ['Michael', 'Bob', 'Tracy']
    #末尾加元素
    >>> classmates.append('Adam')
    #插入元素到指定位置
    >>> classmates.insert(1, 'Jack')
    #删除末尾元素
    >>> classmates.pop()
    #删除某个指定位置的元素
    >>> classmates.pop(1)
    #替换元素内容
    >>> classmates[1] = 'Sarah'
    #元素也可以是另一个list/tuple
    >>> s = ['python', 'java', ['asp', 'php'], 'scheme']
    #可以用二维数组方式访问
    >>> s[2][1]
    #tuple的元素也可以是List
    >>> t = ('a', 'b', ['A', 'B'])
    >>> t[2][0] = 'X'
    >>> t[2][1] = 'Y'
    >>> t
    ('a', 'b', ['X', 'Y'])

    二、条件判断

    if语句完整表达式:

    if <条件判断1>:
        <执行1>
    elif <条件判断2>:
        <执行2>
    elif <条件判断3>:
        <执行3>
    else:
        <执行4>

    注意: 条件判断也可以只是一个变量,只要变量是非零数值、非空字符串、非空list等,就判断为True,否则为False

    三、循环

    1、for...in:把list或tuple的每个元素迭代出来:

    names = ['Michael', 'Bob', 'Tracy']
    for name in names:
        print(name)

    额外:

    range(n)函数:生成0-n的整数序列;

    list()函数:转换成list。

    2、while:满足条件就不断循环,直至条件不满足为止:

    3、break和continue:

      break直接退出循环;

           continue只是跳出此次循环。

    四、dict和set类型

    dict:key-value类型,用{}括号表示。

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

    dict优点:能快速根据key查到相应value,缺点是内存占用大。

    判断key是否存在,可用in:

    >>> 'Thomas' in d
    False

    get方法可以安全地获取指定key的value:

    >>> d.get('Thomas')  #key不存在,返回None
    >>> d.get('Thomas', -1)   #key不存在,返回-1默认值
    -1
    >>> d.pop('Bob') #删除指定key值

    set: 一组key集合,没有value,且key不重复。key值也不排序。

      set可以看成是无序和无重复元素的集合。

    创建set,要用list或者tuple作为输入:

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

    add方法可以添加元素到set中,可重复添加:

    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    >>> s.add(4)  #无效果
    >>> s
    {1, 2, 3, 4}

    remove删除元素:

    >>> s.remove(4)
    >>> s
    {1, 2, 3}

    两个set可以做数学意义上的交集、并集等操作:

    >>> s1 = set([1, 2, 3])
    >>> s2 = set([2, 3, 4])
    >>> s1 & s2
    {2, 3}
    >>> s1 | s2
    {1, 2, 3, 4}

    dict与set的区别:

    唯一区别是set没有对应的value,

    相同点是不可以放入可变对象。

    >>> s=set((1,2))
    >>> s
    {1, 2}
    >>> s.add((1,2))
    >>> s
    {1, 2, (1, 2)}
    >>> s.add((1,[2,3]))  #此代码会报错,因为tuple的元素中包含list,list是可变对象
    Traceback (most recent call last):
      File "<pyshell#4>", line 1, in <module>
        s.add((1,[2,3]))
    TypeError: unhashable type: 'list'

     

     五、函数

    python的内置函数,可参考:http://docs.python.org/3/library/functions.html

    函数定义:

    def def_name(param):
        <函数语句体>

    从其他定义好函数的py文件中引入:

    >>> from abstest import my_abs  #abstest.py文件中引入my_abs函数
    >>> my_abs(-9)
    9

    空函数:用pass语句

    def nop():
        pass   #pass为占位符,可使代码运行时不出错

    参数类型检查:

    python不会自动检查参数类型,所以使用内置函数isinstance()实现:

    def my_abs(x):
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type');
        if (x > 0):
            return x;
        else:
            return -x;

    返回多个值:利用tuple类型返回多个值

    import math
    
    def move(x, y, step, angle=0):
        nx = x + step * math.cos(angle)
        ny = y - step * math.sin(angle)
        return nx, ny   #这里返回多个值,实质是返回tuple
    >>> r = move(100, 100, 60, math.pi / 6)
    >>> print(r)
    (151.96152422706632, 70.0)

    六、各种函数的参数定义

    1、位置参数:即普通参数。

    定义后,调用函数时,位置参数值必须传入。

    2、默认参数:

    def func(x, n=2):  #默认参数要放在位置参数后面
        return x+n
    
    >>>func(1)
    3

    定义了多个默认参数的函数,调用时可按顺序提供参数值。也可以不按顺序提供,这时需要将参数名写上。

    def sum(x, y=2, z=3):
        return x+y+z;
    
    sum(1, 10)    #z参数使用默认值
    
    sum(1, z=10)  #y参数使用默认值

    注:定义默认参数值,一定要指向不变对象。因为Python函数在定义时,默认参数值已经计算出来了。

    def add_end(L=[]):
        L.append('END')
        return L
    
    >>> add_end()
    ['END']
    >>> add_end()
    ['END', 'END']        #第二次的调用开始出问题了。
    >>> add_end()
    ['END', 'END', 'END']

    以上例子可改为:

    def add_end(L=None):
        if L is None:
            L = []
        L.append('END')
        return L

    3、可变参数:

    参数定义前加*号,代表可传入0个或任意多个参数。

    函数调用时,实际自动组装为一个tuple。

    def sum(*numbers):
        result = 0
        for num in numbers:
            result = result + num
        return result
    
    >>>sum(1, 2, 3)
    6
    
    >>>nums = [1,2,3]
    >>>sum(*nums)   #传入list或tuple元素可变成可变参数传入
    6

    4、关键字参数

    **号前缀定义的参数,允许可传入0个或任意个含参数名的参数。

    函数调用时,会将这些参数组装成dict。

    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    
    >>>person('Michael', 30)
    name:Michael age:30 orther:{}
    
    >>>person('Mochael', 30, city='Beijing', job='Engineer')
    name:Michael age:30 orther:{'city':'Beijing', 'job'='Engineer'}
    
    >>>extra={'city':'Beijing', 'job'='Engineer'}
    >>>person('Jack', 24, **extra)   #可以将dict设为关键字参数传入,注意,**kw参数获得的是extra的一个拷贝
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

    5、命名关键字参数

    限制传入的关键字参数,明确指定要传入的参数名。

    定义方式有两种:

    def person(name, age, *, city='Beijing', job):   #*号后的所有参数都是命名关键字参数
        print(name, age, city, job)

    >>> person(
    'Jack', 24, city='Beijing', job='Engineer') #调用时要明确参数命名
    
    
    >>> person('Jack', 24, job='Engineer') #命令关键字参数有默认值时,可不传入


    def person(name, age, *args, city, job): #args可变参数后的都是命名关键字参数 print(name, age, args, city, job)

    五种参数的组合顺序:位置参数(无默认值)、默认参数、可变参数、命名关键字参数、关键字参数

  • 相关阅读:
    PostgreSQL configure: error: readline library not found
    JS实现的模态框弹窗并自动消失
    MySQL安装详细教程
    C++与C#中枚举的区别
    句柄
    RESTFul API
    四、使用ADB命令清除缓存
    C#枚举案例
    Pycharm安装教程
    七、Monkey实战
  • 原文地址:https://www.cnblogs.com/xiwang6428/p/12628188.html
Copyright © 2020-2023  润新知