• 第0篇 Python前言


    1.1编译型与解释型

    • 编译型:一次性编译成2进制,再执行。
      • 优点:执行效率高
      • 缺点:不能跨平台,开发效率低
      • 代表语言:C
    • 解释型:逐行解释成二进制,再执行。
      • 优点:可以跨平台,开发效率高
      • 缺点:执行效率低
      • 代表语言:python

    1.2注释

    1.2.1注释的作用

      用自己熟悉的语言在代码中添加注释,方便后期自己查看和理解,也方便其他人查看和理解代码含义。

    1.2.2单行注释

      以#号开头,#后面的所有内容均不会被程序执行,起到辅助说明的作用。

    1 # 这是一行注释,不会被程序执行
    2 print("hello world")

      说明:为了保证代码的可读性,#后面建议先添加一个空格,然后再添加说明文字。

      也可以在代码后面添加注释,为了保证代码的可读性,建议#号和代码之间至少两个空格。

      pycharm中使用ctrl+/快捷键来给代码添加和删除注释。

    1 # 这是一行注释,不会被程序执行
    2 print("hello world")  # 这是一行注释

    1.4.3多行注释

      如果需要添加的注释文字比较多,可以使用多行注释,以"""号开头,以"""号结尾,中间的文字为需要注释的文字,也可以使用'''号开头,使用'''结尾。

    1 """
    2 这是
    3 多行
    4 注释
    5 """
    6 print("hello world")  # 这是一行注释

    1.3缩进(代码块)

      Python的代码块不使用大括号{}来控制,Python最具特色的就是使用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个是严格执行的。

    • 按照约定俗成的管理,应该始终使用4个空格的缩进;
    • 很多Python程序员建议每行不超过80个字符。
    • 要将程序的不同部分分开,可以使用空行,但程序中不要使用过多的空行。

    1.3.1多个语句构成代码块

    • Python中的换行即表示一个语句结束。
    • 缩进相同的一组语句构成一个代码块。
    • if,while,def和class等复合语句,首行以关键字开始,以冒号:结束,该行之后的一行或多行缩进代码构成代码块。

    1.4一行和多行

    1.4.1同一行显示多条语句

      Python可以在同一行中使用多条语句,语句之间使用分号分割。

    1.4.2一条语句以多行来书写

      Python语句一般以新行作为语句的结束符,但是可以使用斜杠()将一行的语句分为多行显示,如果语句中包含[],{},()就不需要使用多行连接符了。

    aa = ["spring", "summer", "autumn",
          "winter"]

    1.5引号

      Python可以使用单引号,双引号,三引号来表示字符串,引号的开始与结束必须使用相同类型的,其中三引号可以由多行组成,在文件的特定地点,三引号可以被当做注释。

    1.6变量的基本使用

      在Python中每个变量在使用前必须赋值,变量赋值以后该变量才会被创建,等号用来给变量赋值。

    qq_number = "123456789"  # 定义qq号码变量
    qq_password = "12345"  # 定义qq密码变量
    print(qq_number)
    print(qq_password)
    # -----输出结果-----
    # 123456789
    # 12345

     说明:

    • 变量名只有在第一次出现才是定义变量,变量名再次出现,是直接使用之前定义过的变量(相同的作用域)。
    • Python中定义变量不需要指定变量的类型,运行的时候根据解释器,自动推导出变量中保存数据的准确类型。
    • 变量名可以由字母、数字、下划线组成,不能以数字开头,不能与关键字重名。
    • Python中变量名是区分大小写的。
    • 在定义变量时,为了保证代码格式,=的左右两边应该个保留一个空格。
    • 以下划线开头的变量名都是有特殊意义的:
      • 以单下划线开头_foo代表不能直接访问的类属性,需要通过类提供的接口进行访问,不能用from xxx import *导入;
      • 以双下划线开头的__foo代表类的私有成员,以双下划线开头和结尾的__foo__代表Python里特殊方法专用的标志,如__init__()代表类的构造函数。
    • 在Python中,如果变量名有两个或多个单词组成,可以按如下方式命名:
      • 每个单词都使用小写字母,单词与单词之间使用_下划线连接。
      • 在python里的变量,函数和模块名使用下划线链接(user_name_and_password);python里的类名使用大驼峰命名法(每个单词的首字母都大写,PersonModel)。

    1.7常量

      常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量。

      举例,假如小米的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量。

    AGE_OF_PP = 56

    1.8关键字

      关键字是Python内部已经使用的标识符,我们定义的变量不能与标识符重名。

      通过以下命令查看Python中的关键字:

    1 import keyword
    2 print(keyword.kwlist)
    3 
    4 ------输出结果------
    5 ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

    1.9变量的引用

      变量和数据是分开存储的,数据保存在内存中的一个位置,变量中保存着数据在内存中的地址,叫做引用,使用id()函数可以查看变量中保存数据所在的内存地址,另外,如果变量已经被定义,当给一个变量赋值的时候,本质上是修改了数据的引用。

      函数传递的本质是实参保存数据的引用,而不是实参保存的数据。

    def test(num):
        print("在函数内部%d对应的内存地址是%d" % (num, id(num)))
    
    
    a = 10
    print("a对应的内存地址是%d" % id(a))  #a对应的内存地址是1700357408
    test(a)  # 在函数内部10对应的内存地址是1700357408

      在函数内部返回,实际上返回的是数据的引用,而不是数据本身。

    def test():
        result = "hello"
        print("在函数内部变量 %s 的内存地址为 %d " % (result, id(result)))
        return result
    
    
    a = test()
    print("变量a的内存地址为 %d " % id(a))

      Python中参数传递采用的是“传对象引用”的方式,如果函数收到的是一个可变对象(列表或者字典)的引用,就能修改对象的原始值,如果函数收到的是一个不可变对象(元组,数字,字符串等)的引用,就不能直接修改原始对象。变量和数据都是保存在内存的,但是变量和数据分开保存,数据保存在内存,变量中保存着数据在内存的地址,变量中记录数据的地址叫做引用,可以使用id()函数查看变量的地址。另外,不可变数据类型有元组,字符串,数字类型int,bool,float,complex,long等,可变的数据类型由列表,字典

      在我们使用字典时,字典的key值只能是使用不可变数据类型。

    # 1.字符串引用
    a = '1234'
    b = a
    a = 'hello'
    print("a:", a)
    print("b:", b)
    print("a的内存地址:", id(a))
    print("b的内存地址:", id(b))
    # 2.列表的引用
    a = [1, 2, 3, 4]
    b = a
    b[3] = 8
    print("a:", a)
    print("b:", b)
    print("a的内存地址:", id(a))
    print("b的内存地址:", id(b))
    
    # -------输出结果-------
    # a: hello
    # b: 1234
    # a的内存地址: 2699912795728
    # b的内存地址: 2699911133872
    # a: [1, 2, 3, 8]
    # b: [1, 2, 3, 8]
    # a的内存地址: 2699911201224
    # b的内存地址: 2699911201224

    1.10局部变量和全局变量

      局部变量是在函数内部定义的变量,只能在函数内部使用,全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量。

      在函数内部,可以通过全局变量的引用获取对应的数据,但是,不允许直接修改全局变量的引用。

    num = 10
    
    
    def func1():
        num = 90  # 在函数内部定义了一个局部变量
        print("func1==>%d" % num)
    
    
    def func2():
        print("func2==>%d" % num)
    
        
    func1()
    func2()
    # --------输出---------
    # func1==>90
    # func2==>10

      在函数内部修改全局变量,可以使用global关键字。

    num = 10
    
    
    def func1():
        global num  # global关键字会告诉解释器后面的变量是一个全局变量,在使用赋值语句时,就不会创建局部变量。
        print("func1==>%d" % num)
    
    
    def func2():
        print("func2==>%d" % num)
    
    
    func1()
    func2()
    # --------输出---------
    # func1==>10
    # func2==>10

      全局变量命名的建议

        全局变量名应该增加g_或者gl_的前缀。

    1.11程序交互(input)

      函数input()让程序暂停运行,等待用户输入一些文本,获取用户输入后,将其值存储到一个变量中,可以方便使用。

    name = input("What is your name?")
    age = input("How old are you?")
    hometown = input("Where is your hometown?")
    
    print("Hello ", name, "your are ", age, "years old, you came from", hometown)

      注意:不管用户输入的是什么,变量保存的结果都是字符串。

    1.12输出(print)

      Python3的输出使用print函数,分为换行输出和不换行输出,在print()的括号中加上字符串,就可以向屏幕上输出指定的文字,括号中还可以放表达式。

    print(value, ..., sep=' ', end='
    ', file=sys.stdout, flush=False)
    • sep参数用来表示输出时,每个值之间使用哪个字符作为分隔,默认使用空格作为分隔符。
    • 不换行输出:将括号里的所有参数输出在一行,只需要在每一个参数后面加一个,即可。最后一个参数后面没有逗号,参数之间的逗号,输出来之后是空格。
    • 换行输出:print()默认的输出是换行的。如果不想换行,后面可以加上end=' ',即print(b,end=' ')

    1.12.1输出时常用的函数

    • str():将对象转化为适于人阅读的形式,返回一个对象的string形式。
    • repr():将对象转化为供解释器读取的形式,返回对象的string形式,可以输出包括转义字符在内的所有字符。
    # -*- coding:utf-8 -*-
    
    x  = "abcde
    f
    g"
    
    print(str(x))
    print(repr(x))
    
    ---------输出结果----------
    abcde
    f
    g
    'abcde
    f
    g'

    1.12.2格式化输出

    1.12.2.1百分号占位符

    # 在字符串里可以使用%占位符
    # %s ==> 表示的是字符串的占位符
    # %d ==> 表示的整数的占位符
    # %nd ==> 打印时,显示n位,如果不够,在前面使用空格补齐。
    # %f ==> 表示的浮点数的占位符
    # %.nf ==> 保留小数点后n位
    # %x ==> 十六进制输出
    # %% ==> 表示百分号%
    print("大家好,我的名字%s,我今年%d岁,我今天挣了%f元钱" % ("小明", 12, 3.11))
    print("大家好,我的名字%s,我今年%d岁,我今天挣了%.3f元钱" % ("小明", 12, 3.11))
    print("大家好,我是%3d号男嘉宾" % 5)  # 大家好,我是  5号男嘉宾
    print("大家好,我是%-3d号男嘉宾" % 5)  # 大家好,我是5  号男嘉宾
    print("大家好,我是%03d号男嘉宾" % 5)  # 大家好,我是005号男嘉宾

      现在有这么行代码

    msg = "我是%s,年龄%d,目前学习进度为80%" % ('金鑫',18)
    print(msg)

      这样会报错的,因为在格式化输出里,你出现%默认为就是占位符的%,但是我想在上面一条语句中最后的80%就是表示80%而不是占位符,怎么办?

    msg = "我是%s,年龄%d,目前学习进度为80%%" %('金鑫',18)
    print(msg)

      这样就可以了,第一个%是对第二个%的转译,告诉Python解释器这只是一个单纯的%,而不是占位符。

      说明:input接收的所有输入默认都是字符串格式

    1.12.2.2format()格式化字符串

      1.在括号中的数字用于指向传入对象的format()中的索引位置:

    print("{0}和{1}".format("zhangsan", "lisi"))

      2.format()中使用了关键字参数,它们的值会指向使用该名字的参数。

    print("{0}和{1}和{other}".format("zhangsan", "lisi", other="wangwu"))
  • 相关阅读:
    Java 线程之间的通讯,等待唤醒机制
    Java 死锁以及死锁的产生
    2018Java开发面经(持续更新)
    OpenFlow1.3协议wireshark抓包分析
    SDN核心技术剖析和实战指南---读书笔记
    Kafka常用命令
    安装kafka+zk-ui
    flink窗口
    flink架构原理
    安装Flink集群
  • 原文地址:https://www.cnblogs.com/zhuzhaoli/p/10327268.html
Copyright © 2020-2023  润新知