Python基础知识:一

python官网:https://www.python.org/

Anaconda:https://www.anaconda.com/

如果不想使用PyCharm,VS Code,而只想使用Spyder,JupyterLab或者Jupyter NoteBook的。但Spyder,JupyterLab,和Jupyter NoteBook的安装方法又比较复杂。可以直接下载安装Anaconda,启动Anaconda之后,就可以Anaconda中打开想用的IDE了。

Anaconda中包含了多个IDE:Pycharm,Spyder,JupyterLab,Jupyter NoteBook,Qt Console, Glueviz,Orange 3,Rstudio。

Anaconda也有缺点,启动和初始化过程比较慢。

Kite:https://kite.com/

Kite配套IDE使用,提升编辑器的体验,目前支持Pycharm,Spyder,VS Code。

  • Python中单引号和双引号的区别:没有区别,均表示引号内的字符为一个字符串,包括空格、制表符。

  • 使用三个双引号或单引号表示多行字符串:"""或''',在多行字符串的前后分别使用三个双引号或单引号。

  • print()函数:函数内可以将字符串使用加号(+)拼接,也可以各个要打印的字符串或变量使用逗号(,)隔开。使用逗号(,)隔开时,Python会自动在在打印结果中将隔开的部分之间增加空格。

    • print("abc"+"def") #打印结果:abcdef

    • print("abc","def") #打印结果:abc def

    • print("abc","def",end=' ') #print()函数入参(行参)中的end变量,设置打印结果的结尾使用“空格”,而非默认的换行。end是一个可选的入参(行参),省略时,打印结尾默认是“换行符”。

  • format()函数: 一个字符串后面可以调用format()函数来定义字符串中值。

name = "will"
age = "20"
print("{0} is {1} years old".format(name,age))
  • 转义字符:\

  • 变量:Python中的变量名,是区分大小写的。变量可以通过赋值直接使用,不需要事先声明,或者定义变量的数据类型。

  • 代码段:Python中的一个物理行就是一个逻辑行,Python推荐一行一个语句。如果单个物理行中包含多个逻辑行,则必须使用分号(;)。如果一个物理行过程,则可以使用\,将多个物理行拼接成一个逻辑行。

  • 缩进:同一组语句,有着相同的缩进。有着相同缩进的语句,被称为语句块。Python使用缩进来表示代码块,而其它语言例如C++则使用花括号({})。Python中的缩进需要一个以上的空格,而官方建议统一为4个空格,另外最好使用Tab。

  • 运算符和表达式

    • 加(+):可以是数字相加,也可以是字符串相加。

    • 减(-):数字相减,或表示负数。

    • 乘(*):数字相乘,或字符串相加若干次。

    str = "abc";
    print(str*3)  #打印出abcabcabc。
    • 乘方(**):3**4等于81。

    • 除(/)。

    • 除,并且向下取整(//)。

    • 取模:取除之后的余数(%)。

    • <<:将二进制的数据向左位移X位。 2 << 2 = 8。

    • >>:将二进制的数据向右位移X位。 2 >> 2 = 0。

    • 与运算(*):按照数字的二进制,进行对应位的与运算。

    • 或运算(|):按照数字的二进制,进行对应位的或运算。

    • 异或运算(^):按照数字的二进制,进行对应位的异或运算。

    • 按位取反(~):按照数字的二进制,把每一位都进行取反操作。按位取反有一个规律公式:~x = -(x + 1)

    • 大于(>)。

    • 大于等于(>=)。

    • 小于(<)。

    • 小于等于(<=)。

    • 不等于(!=)。

    • 布尔非:not

    • 布尔与:and

    • 布尔或:or

    • Python中的Ture和False关键词:True和False的首字母大写,其余小写。

    • 表达式的简写:变量 = 变量 * 变量1,则可以简写成:变量 *= 变量1。其它运算符也可以如此。

  • 控制流:if,for,while

    • if:if 条件==true: 运行代码块1,否则运行代码块2. elif:第二个条件。 if和elif的判断条件之后,需要使用冒号(:),else之后也要使用冒号(:)。 每个条件要执行的语句,需要是一个独立的代码块,代码块需要使用缩进来表示。

    • while 条件 == true:运行while代码块。通过while内部代码更改条件状态来终止while循环。while循环可以有一个对应的else。 while的条件,以及else后面均需要冒号(:)。

    • for 变量 in 集合:for循环后面同样可以配一个else。

    • break语句:对于while和for循环,无需条件变为False,即可跳出循环。跳出循环后,也不会再执行else语句。

    • continue语句:跳出此次循环,继续执行下一次循环迭代。

  • range()函数:range([start,]end[,step]),创建一个整数列表,一般用于for循环中。

    • start:始于,可以省略,省略时默认从0开始。输出内容中包含start值。

    • end:结束于,不可以省略。输出内容中不包含end值。

    • step:步长,可以省略,省略时默认为1。

    • 每次只会产生一个值,如果需要获取range()的全部值,配合list()函数。用法:list(range())。

  • str():将其它数据类型专为字符串。

  • 函数

    • 使用def定义函数。

    • def print_hello():定义了一个无入参的函数。

    • def print_hello(name,age):定义了有两个入参的函数。

    • def print_hello(name,age = 23):定义了有两个入参的函数,但是age入参是可选的,可选时默认age = 23。记住,只有入参(行参)的最后的参数才能设置为可选的带有默认值的参数。最后的参数可以是最后1个,也可以是最后2个,3个等。也就是说,不能在可选参数后面,又加入了必选参数。

    • def 函数名():,函数名括号后面需要使用冒号(:)。

    • 局部变量:函数内的局部变量,在函数外无效。

    • 如果想在函数内部使用函数外部的变量,则需要使用global语句,否则只能被认为是函数内部的变量。如果函数外部的变量,在函数内没有同名的变 量,可以使用global或不使用global,其实都是在使用外部变量。但建议此时同样使用global语句。也就是说,无论函数内部的变量有没有和函 数外部的变量重名,使用外部变量时,都应该使用global语句。global语句的使用很简单,在变量名前加global关键词就可以了。

    • 调用函数时,输入的参数,称为实参。

    • 关键字参数:如果一个函数中有很多个参数,调用函数时,可以带入入参(行参)变量名的方式。这样无需按照函数定义时的入参(行参)顺序和数量。

    def keyword_fun(p1,p2,p3,p4 = 23,p5 = 26):
    print("p1 = " + str(p1)+" P2= "+ str(p2)+" p3= "+str(p3) + " p4 = "+ str(p4) + " p5= "+str(p5))
    keyword_fun(1,2,3,4,5)
    keyword_fun(1,2,3)
    keyword_fun(p2=34,p1=28,p3=26)
    keyword_fun(p2=24,p1=28)  #error,p3为必须参数,调用函数时缺少参数p3则会报错。
    • return语句:函数调用完成后,会返回一个值。return没有值时,表示跳出这个函数。当然有值也表示跳出函数,顺带返回一个值。

    • pass语句:Python中的pass表示一个空的代码块,用于占位。

    • DocStrings:文档字符串,通过调用函数的DocStrings,来输出函数中使用三个单引号(''')书写的注释。调用方法为:函数名.__doc__。doc前后各有两个下划线。

  • 模块(Module):程序内部可以重复使用函数,那么在程序外部可用重复使用的就是模块了。

    • import 模块(库名):引入模块(库)。

    • Python引入库的开销很大,所以Python提供了导入“字节码文件 .pyc”的文件。这样可以使导入过程变得更快速。

    • 模块名:可以通过__name__查询当前运行的模块名。

    • 创建模块(Module):一个Python代码文件,就是一个Module。

    • dir()函数:例如dir(sys),sys为标准库,此函数可以返回sys库中的所有函数、类和变量。

    • 程序包:程序包内充满了模块。

  • 数据结构:用来存储相关数据的集合。

    • Python中有四种内置的数据结构:list,tuple,dictionary,set。

    • list:保存有序项集合,每个项目之间用逗号(,)隔开。而整个项目列表需要使用中括号([])括起来。List中的项目,可以增加,删除和搜索。

      • 定义:my_list = ["food","water","apple"]

      • append()函数:list名称.append(实参),用于在list的项目列表最后增加一个项目(项目内容就是实参的值)。

      • sort()函数:将list中的项目进行排序。

      • del语句,删除list中的某一项目。使用方法为:del list_name[0],删除list中的第一项。

    • tuple(元组):多个对象的组合,类似于list,但没有list功能丰富。tuple内容不可以修改。

      • 元组是由一些特殊的项定义的,这些项在一对可选的圆括号中,由逗号隔开。

      • 定义:my_tuple = ("food","water","apple")

      • tuple可以有一系列项,以及其它tuple来组成。例如:my_new_tuple = "orangle","leechee",my_tuple

      • tuple是可以嵌套的,tuple中可以有tuple,tuple中的tuple还可以有tuple。

      my_tuple = ("food","water","apple")
      print(my_tuple)
      my_tuple01 = "food","water","apple","pare"
      print(my_tuple01)
      my_new_tuple = "leechee",my_tuple,my_tuple01
      print(my_new_tuple)
      print(my_new_tuple[0])
      print(my_new_tuple[1])
      print(my_new_tuple[2])
      print(my_new_tuple[0])
      print(my_new_tuple[1][1])
      print(my_new_tuple[2][2])
      
      # 打印结果
      # ('food', 'water', 'apple')
      # ('food', 'water', 'apple', 'pare')
      # ('leechee', ('food', 'water', 'apple'), ('food', 'water', 'apple', 'pare'))
      # leechee
      # ('food', 'water', 'apple')
      # ('food', 'water', 'apple', 'pare')
      # leechee
      # water
      # apple
      • tuple中需要注意的点:定义0项内容的tuple,使用tuple_name = (),但定义1项内容的tuple,必须使用tuple_name = ("abc",)。

    • dictionary 字典:由键值对组成,键必须是唯一的。键只能使用不可变对象,但值可以使用可变或者不可变对象。

      • 定义dictionary:{键1:值1,键2:值2,键3:值3} 。

      • 获取某一个键的值:dictionary_name[键名]

      • 删除某一对键值:使用del语句,del dictionary_name[键名]

      • items()函数:列出字典中的全部键值对。items()函数返回的是一个list集合。

      • 添加一个键值对:dictionary_name[键名] = 值。

      • list和tuple均使用索引[数字]来获取对应的值,字典dictionary使用索引[]来获取对应的值。

    • 序列:列表、元组、字符串都是序列的一种。

      • 通过索引来单个项目,也称为下标操作。

      • 序列索引也可以是负数,代表着从后往前数。

      • 序列索引可以是一个范围:例如[1:5],[1:-1],[1:],[:],[:-1]

      • 序列切片是可以有一个可选的第3个参数,代表步长,省略时表示默认步长1。[1:5:2],从1到5,步长2.

    • set集合:是一种无序集合。

      • set中的元素具有互异性,即set集合内的元素不能相同。set和dictionary类似,但只有键没有值,键不能重复。

      • 定义一个set有两种方法。

        • set_name = {'abc','def'}

        • set_name = set(['abc','def'])

      • 定义一个空的set,必须用set()函数,因为{}是用来定义一个空dictionary字典。

      • copy()函数:将一个set的内容,复制到另外一个set。 set1 = set2.copy()。

      • add()函数:在set中添加一个元素。 set1.add('def')。

      • issuperset()函数:set01.issuperset(set02),set集合set02中的元素是否全部包含在set01中。

    • 引用:当你创建了一个对象,并把它赋值给一个变量时,这个变量只是 引用 了这个对象,变量并不能代表对象自身!因此,你可以把变量名当作一个指针,它指向储存对象的那一块计算机内存。这称作绑定 名称到对象。记住:如果你想要获得列表、或者类似的序列、或更复杂对象的副本,只要不是像整数一样简单的 对象 ,你都需要通过切片操作来获得它的副本。如果你直接把一个变量名赋值给另一个,它们两个都会引用同一个对象。在赋值时你需要注意这一点,不然可能会造成意想不到的结果,从而带来麻烦。

    print('Simple Assignment')
    shoplist = ['apple', 'mango', 'carrot', 'banana']
    # mylist 只是指向同一个对象的另一个别名!
    mylist = shoplist
    
    # 我买下了第一件商品,所以把它从列表中移除
    del shoplist[0]
    
    print('shoplist is', shoplist)
    print('mylist is', mylist)
    # 注意到 shoplist 和 mylist 产生了同样的输出
    # 输出的都是没有 'apple' 的相同列表
    # 这验证了它们都指向着同一个对象
    
    print('Copy by making a full slice')
    # 通过全切片来获得一个副本
    mylist = shoplist[:]
    # 移除第一个元素
    del mylist[0]
    
    print('shoplist is', shoplist)
    print('mylist is', mylist)
    # 注意到现在这两个列表有差异了
    • 类:一个类创造了一个新的类型,而对象就是类的实例。

      • 一个对象可以通过使用属于类的函数实现一定的功能。这些函数被称作类的方法。

      • 类的定义:class class_name:

    • 文件处理

      • open(文件名,权限),以什么样的权限打开一个文件。权限:w可写,r只读(只读时可以省略权限参数),a追加。例如:f = open("xxx.txt",'w')。

      • write()函数:将内容写入文件。例如f.write('abcdef')。

      • close()函数:操作完毕后,关闭文件。

      • readline()函数:读区文件的每一行。

    • 异常处理

      • 使用try:...except 异常类型:来处理异常。except之后可以跟特定的异常类型,except块中代码,会对此类异常进行处理。如果except后面没有跟任何异常类型,将处理全部类型的异常。try最后可以跟一个else,当然和异常都没发生时,执行else中的操作。

    • 函数中返回两个以上的值:使用return语句时,return一个元组tuple。

You may also like...