美文网首页
python基础入门2020-11-19

python基础入门2020-11-19

作者: N27_loong | 来源:发表于2020-11-19 11:26 被阅读0次

    第一单元 python基本语法


    教程内容来自路飞学城的免费文档,感谢前行者们的付出.

    2020-11-18第三次编辑
    2020-11-19第一次迁移到简书
    2020-11-30修订

    1.1 编程语言的分类

    机器语言

    优点是最底层,速度最快,缺点是最复杂,开发效率最低

    汇编语言

    优点是比较底层,速度最快,缺点是复杂,开发效率最低

    高级语言

    编译型语言执行速度快,不依赖语言环境运行,跨平台差

    解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行

    1.2 Python介绍

    Python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。

    最新的TIOBE排行榜,Python赶超C++占据第3, 与Java、C一起成为全球最流行的3大编程语言。

    Python崇尚优美、清晰、简单,上手简单,非常适合做为第一门编程语言来学习。

    Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。

    python的优点

    1. Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序 .

    2. 开发效率非常高,Python有非常强大的第三方库

    3. 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

    4. 可移植性————由于它的开源本质,Python已经被移植在许多平台上

    5. 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们

    6. 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能

    python的缺点

    1. 速度慢.对比编译型的c语言来说,是慢,但是对人来说是感觉不到的.

    2. 代码不能加密. 因为PYTHON是解释性语言,它的源码都是以名文形式存放的

    3. 线程不能利用多核.

    1.3 python 语法

    1.3.1 变量:

    变量是保留在一段内存地址中的程序数据.变量是通过变量名来调用的.创建的变量名将指向内存中存储变量值的地址.当给一个变量名赋新值时,并不是将原有内存地址中的变量值更改,而是在内存中另外一个位置创建一个新值,变量名指向新的内存地址!

    因此: 如果有变量a= 1,变量b=a,
    则变量a的值是1,b的值是1
    如果给变量a一个新值,a=2,则变量a的值是2,b的值仍然是1!
    因为给变量a赋新值实际上在内存中一个新地址中创建的,然后变量a再指向这个新地址,但 是变量b仍然指向原有内存地址中的数值,所以值仍为1.

    变量命名规则:变量名只能是 字母、数字或下划线的任意组合,第一个字符不能是数字,也不建 议用""开头,因为""开头的名称在python中特殊含义.

    变量名的书写:建议使用下划线体.也是python官方推荐 如:

    age_of_oldboy = 56

    1. 常量: python中没有常量,约定俗成的,使用全大写名称代表常量.

    id()方法是查看变量内存地址的方法上例中

     >>>id (a) 
    8791295723200 
    >>>id (b) 
    8791295723168
    
    1.3.2 基本数据类型
    1.3.2.1 数值型:

    整型数 (int) 和浮点数 (float).python3中取消了整数的位宽,理论上整数可以取无限大.

    >>> a = 2**22 
    >>> a 
    4194304 
    >>> type(a) 
    <class 'int'>
    
    1.3.2.2 字符串型:

    在Python中,加了引号的字符都被认为是字符串! 引号可以是单引号,也可以是双引号,甚至是三引号.三引号的作用就是可以进行换行,单引号或双引号定义字符时是不能换行的.

    msg = "My name is Alex , I'm 22 years old!" 
    msg = ''' 
                今天我想写首小诗, 
                歌颂我的同桌 
                你看他那乌黑的短发, 
                好像一只炸毛鸡。
          ''' 
    print(msg)
    

    字符串的常用操作

    1. 拼接,将字符串变量合并输出

    例:

    >>>name = "关羽"
    >>>age = "32" 
    >>>name +age 
    '关羽32' 
    >>>
    
    1. 字符串相乘:就是重复输出字符串

    例:

    >>>name*10
     '关羽关羽关羽关羽关羽关羽关羽关羽关羽关羽' 
    >>>
    

    字符串的拼接只能是字符串之间进行,字符串和其他的数据类型不能拼接

    1.3.2.3布尔型

    布尔型只有两个值,一个是真(Ture),一个是假(False).计算机根据布尔值的结果,进行逻辑判断,从而决定程序的走向.

    1.3.2.4列表(list)

    就是其他语言中的数组,通过下标来标记一组信息的位置.使用时可以通过下标来方便的调用数据.

    列表的特点:

    1.可存放多个值
    2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序
    3.可修改指定索引位置对应的值,可变

    例:

    >>>names = ['Alex', 'Jack', 'Rain', 'Rachel', 'Mack'] 
    >>>names[2] #names [2] 指取出下标为2的数据 
    >>>'Rain'
    

    下标从0开始,每添加一个元素,下标就自动加1.从左向右顺序排列

    image

    列表中元素和下标的对应关系

    列表中元素的添加 删除 修改和判断元素是否在列表中

    列表元素的添加

    1. 插入元素: insert()

    例:

    >>>names
    >>>['Alex', 'Jack', 'Rain', 'Rachel', 'Mack']
    >>>names.insert(3,"小明")
    # 3代表你想插入的位置,表示插入到下标为3的元素的前面 
    # 插入不能插入到列表的尾部
    >>>names
    ['Alex', 'Jack', 'Rain', '小明', 'Rachel', 'Mack']
    >>>
    
    1. 在列表中追加元素:append()

    追加是将元素加入到列表的尾部

    例:

    >>>names 
    ['Alex', 'Jack', 'Rain', '小明', 'Rachel', 'Mack'] 
    >>>names.append("小强")
    >>>names
    ['Alex', 'Jack', 'Rain', '小明', 'Rachel', 'Mack', '小强']
    
    1. 列表元素的修改

    直接根据下标找到元素重新赋值即可

    例:

    >>>names[0] = "金角大王Alex" 
    >>>names
    ['金角大王Alex', 'Jack', 'Rain', '小明', 'Rachel', 'Mack', '小强']
    
    1. 查操作:判断元素是否在列表中 in和取出元素下标

    元素名 in 列表名,看返回的值是否为真.

    >>>names 
    ['金角大王Alex', 'Jack', 'Rain', 'Rachel', 'Mack', '小强'] 
    >>>"Mack" in names 
    True
    

    取出元素下标 index() 计算元素的个数count()

    >>>names = ['金角大王Alex', 'Jack', 'Rain', 'Rachel', 'Mack', '小强']
    >>>names.index("Mack") 
    4  #如果有多个相同的元素,只返回从左到右匹配到的第一个元素的下标
    

    计算列表中元素的个数

    >>>names.append("金角大王Alex")
    >>>names ['金角大王Alex', 'Jack', 'Rain', 'Rachel', 'Mack', '小强', '狗蛋', '绿毛', '金角大王Alex']
    >>>names.count("金角大王Alex") 
    2
    >>>
    

    计算列表中一共有多少元素 len()方法

    >>>len (names) 
    7
    
    1. 删除元素 remove(),pop()和del方式

    remove()方法

    >>>names
    ['金角大王Alex', 'Jack', 'Rain', '小明', 'Rachel', 'Mack', '小强'] >>>names.remove("小明") 
    >>>names 
    ['金角大王Alex', 'Jack', 'Rain', 'Rachel', 'Mack', '小强']
    

    上面的命令会删除从左开始找到的第一个小明, 如果有多个小明,则只删除找到的第一个。

    del 删除

    >>>del names[1] #删除下标为1的元素'jack' 
    >>>names
    ['金角大王Alex', 'Rain', '小明', 'Rachel', 'Mack', '小强']
    

    del是全局删除,可以删除变量.列表等所有数据

    pop()删除, 默认删除最后一个元素并返回被删除的值 .加入下标可以删除指定的元素

    >>>names 
    ['金角大王Alex', 'Jack', ['a', 'b'], 'Rain', 'Rachel', 'Mack', '小强', '狗蛋', '绿毛', '鸡头']
    >>>names.pop() #留空的话,默认删除列表最后一个元素,并返回其值 '鸡头'  
    >>>names.pop(2) #删除指定下标的元素,并返回其值 ['a', 'b'] 
    >>>names
    ['金角大王Alex', 'Jack', 'Rain', 'Rachel', 'Mack', '小强', '狗蛋', '绿毛'] 
    >>>
    

    6.列表的合并 extend ()方法

    extend (要合并的列表名)将一个列表的值,追加到另一个列表的尾部.合并后的列表还是一个列表.

    例:

    >>>n1 = ["狗蛋","绿毛","鸡头"] 
    >>>names.extend(n1) 
    >>>names 
    ['金角大王Alex', 'Jack', 'Rain', 'Rachel', 'Mack', '小强', '狗蛋', '绿毛', '鸡头'] 
    >>>
    
    1. 列表的嵌套

    列表的嵌套在是在一个列表中再包含另一个列表,这个嵌套进来的列表也是大列表中的一个元素.取值的方法和列表取值的方法一样,嵌入的方法也和列表插入的方法一样.

    例:

    >>>names
    ['金角大王Alex', 'Jack', 'Rain', 'Rachel', 'Mack', '小强', '狗蛋', '绿毛', '鸡头']
    >>>names.insert(2,['a','b']) 
    >>>names 
    ['金角大王Alex', 'Jack', ['a', 'b'], 'Rain', 'Rachel', 'Mack', '小强', '狗蛋', '绿毛', '鸡头'] 
    >>>
    

    嵌套取值: 取出上例中嵌套列表中的 'b'

    例:

    >>>names[2][1]
     'b' 
    >>>
    

    列表的清空clear()方法

    例:

    >>>n1 ['狗蛋', '绿毛', '鸡头'] 
    >>>n1.clear() 
    >>>n1 # 列表依然存在,但是其值被清空 
    []
    >>>
    >>>del n1 # 这将彻底清除n1列表变量 
    >>>n1
    Traceback (most recent call last):
     File "<pyshell#18>", line 1, in <module n1 
    NameError: name 'n1' is not defined
    >>>
    

    列表的切片,反转,步长,循环和排序

    列表的切片:

    就是根据需要取出列表中的部分值.语法如下.

    names[start:end]
    列表变量名 [开始下标:结束下标]
    列表的切片的地址定界下标,有顾头不顾尾的特点.取值时会取出开始下标的值但不会取出结尾下标的值.

    例:下列列表[1:4],下标4的元素:狗蛋是不会显示.只显示1~3个下标的元素.

    >>>names  
    ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']  
    >>>names[1:4] #不包含下标4的元素  
    ['黑姑娘', 'rain', 'eva']
    

    But,如果要取出最后一个元素怎么办呢? names[1:6]是不行的,因为列表切片是顾头不顾尾,最后一个下标仅能表示取值范围到此为止,只显示最后下标之前的内容.

    这时,可以省略结束地址下标.就可以取到末尾. 
    >>>names[3:] 
    ['eva', '狗蛋', '银角大王', 'eva'] 
    同样的,省略开始下标,代表取出前面所有的元素 
    >>>names[:3]
    ['金角大王', '黑姑娘', 'rain']
    如果省略全部的地址下标就是取出所有元素 
    >>>names[:] 
    ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']
    >>>
    

    列表下标的排列从左到右依次是0,1,2,3----.从右到左顺序是-1,-2,-3,-4-----.

    因此,要取出列表最未一位的元素可以写成

    >>>names[-1] 
    'eva'
    

    思考:如果命令是names[-1:-5]会怎样?

    结果是不会显示任何内容.只显示一个空列表.因为列表只能从左到右的依次显示.-1的右边是没有值的,因此显示为空.

    列表的反转和步长

    如果要实现-1,-2,-3顺序显示,实际上是将列表反转.要实现这个操作,要使用步长.

    步长参数定义

    names[start:end:step] step就是定义的步长 默认是1

    步长的应用:列表反转和跳跃取值

    跳跃取值

    >>>a = [1,2,3,4,5,6,7,8,9]
    >>>a [::2] #步长设为2时的取值
    [1, 3, 5, 7, 9] 
    >>>a [::3] #步长设为3时的取值
    [1, 4, 7] 
    >>>
    

    步长也可以设置成负值,设成-1,就实现了列表的反转输出.但列表中的元素排列实际没有变化,只不过是输出时是反转输出

    >>>a 
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>>a [::-1] 
    [9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>>
    

    reverse()方法反转列表,列表中的元素排列也变化了,不是仅列表输出更改.

    >>>a 
    [9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>>a.reverse()
    >>>a
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>>
    

    sort()方法对列表排序,像这种各种字符的混合,排序是依据ascII表的排列顺序来排序.

    >>>names=['金角大王',  'rain',  '@',  '黑姑娘',  '狗蛋',  "4","#",'银角大王',  'eva']
    >>>names.sort()
    >>>names 
    ['#',  '4',  '@',  'eva',  'rain',  '狗蛋',  '金角大王',  '银角大王',  '黑姑娘']
    

    ascII表

    image

    列表的循环: for 循环

    设置临时变量i,用临时变量来循环列表.列表的每个元素顺序赋值给临时变量

    >>>a 
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>>for i in a: 
                print (i) 
    1 
    2 
    3 
    4 
    5 
    6 
    7 
    8 
    9
    

    思考:['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']这个列表中,怎么取出第二个eva值的下标? (index()和for循环)

    Python3列表中获取相同元素出现位置的下标

    1.3.2.5 元组:tuple

    元组又被称为只读列表,其元素不能修改。

    定义:与列表类似,只不过[]改成()

    特性:
    1.可存放多个值
    2.不可变
    3.按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序

    创建:

    ages =  (11,  22,  33,  44,  55) 
    type (ages) 
    <class 'tuple'>
    

    其他下标索引,查操作,切片,元组循环操作同列表操作.

    元组中元素是不可变的,但是元组中插入的可变列表中的元素是可变的.

    例:

    >>> data 
    (99,  88,  77,  ['Alex',  'Jack'],  33)
    >>>data[3][0] =  '金角大王'   #修改元组中嵌套列表中的值
    >>>data (99,  88,  77,  ['金角大王',  'Jack'],  33)
    

    说明:元组中['Alex', 'Jack']这个元素的在内存中的地址是不可变的,但是alex和jack这两个值是存在另外的内存地址中的,这两个是可变的.就像杯子是不可变的,但是杯子中可以盛水,也可以盛酒一样.

    1.3.2.6字典

    列表可以遍历查询数据,但是如果这个列表中的数据很多,有许多重复的数据,列表的查询是非常麻烦的,也非常耗费资源.

    接下来的字典可以实现查询数据又快、操作又方便,是日后开发中必备神器。

    字典是Python语言中唯一的映射类型。

    字典的定义

    {key1:value1,key2:value2}

    • 要用{}括起来

    • 关键字key和值用冒号分开,冒号前面的是关键字key,后面的是值

    • key是唯一的,不可变数据类型,不可重复的

    • 值可以有多个,并用","分开,可修改,可重复

    • 字典无序

    • 查询速度快,不受字典文件大小影响.

    字典的创建

    1. 
    >>>person =  {"name":  "alex",  'age':  20} 
    2. 
    >>>person = dict(name='seven', age=20) 
    或者 
    >>>person = dict({"name":  "egon",  'age':  20}) 
    3. 
    >>>{}.fromkeys([1,2,3,4,5,6,7,8],100) 
    {1:  100,  2:  100,  3:  100,  4:  100,  5:  100,  6:  100,  7:  100,  8:  100}
    

    字典数据的追加

    names =  { "alex":  [23,  "CEO",  66000], "黑姑娘":  [24,  "行政",  4000], } 
    # 新增k 
    names["佩奇"]  =  [26,  "讲师",  40000]
    

    字典数据的删除 要注意不同的方法所用括号的区别.

    1.
    names.pop("alex") # 删除指定key 
    2.
    names.popitem() # 随便删除1个key 
    3.
    del names["oldboy"] # 删除指定key,同pop方法 
    4.
    names.clear() # 清空dict
    

    小练习传送门

    删除操作

    1.names.pop("alex") # 删除指定key
    2.names.popitem()   # 随便删除1个key
    3.del names["oldboy"] # 删除指定key,同pop方法
    4.names.clear()     # 清空dict
    

    修改操作
    修改操作,同新增的方法.当新增的key存在时,其对应的内容会被新增的内容替换.若没有,就是新增一个数值.

    dic['key'] = 'new_value' #如果key在字典中存在,'new_value'将会替代原来的value值;
    dic.update(dic2) # 将字典dic2的键值对添加到字典dic中
    

    查操作
    只针对key有查询,不能查对应的值.因为值有多个且可重复

    dic['key'] #返回字典中key对应的值,若key不存在字典中,则报错;
    >>>dict_list = {}.fromkeys(["a","b","c","d","e","f"],100)
    >>>dict_list
    {'a': 100, 'b': 100, 'c': 100, 'd': 100, 'e': 100, 'f': 100}
    >>>dict_list['b']
    100
    >>>dict_list['j']
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        dict_list['j']
    KeyError: 'j'
    '''为了避免在程序运行中出现上面的情况,可以用下面的get()方法,当元素不在字典中时,默认返回空值'''
    >>>dict_list.get("b")
    100
    >>>dict_list.get("j")
    >>>
    '''根据返回真,假的值判定"'
    >>> "f" in dict_list
    True
    >>> "j" in dict_list
    False
    >>> '''返回字典所有key的列表'''
    >>> dict_list.keys()
    dict_keys(['a', 'b', 'c', 'd', 'e', 'f'])
    >>> '''返回一个包含字典所有value的列表;'''
    dict_list.values() 
    dict_values([100, 100, 100, 100, 100, 100])
    '''返回一个包含所有(键,值)元组的列表'''
    dict_list.items()
    dict_items([('a', 100), ('b', 100), ('c', 100), ('d', 100), ('e', 100), ('f', 100)])
    

    字典的循环
    for k in dic # 推荐用这种,效率速度最快

    >>> for k in dict_list:
        print (k,dict_list[k])
    
        
    a 100
    b 100
    c 100
    d 100
    e 100
    f 100
    >>> 
    

    求长度,也可以返回列表的长度(元素个数)
    len(dic)

    1.3.2.7 集合
    1.3.2.8字符串

    相关文章

      网友评论

          本文标题:python基础入门2020-11-19

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