• python学习笔记一


    系统环境

    [root@localhost day1]# cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 6.5 (Santiago)

    python版本

    [root@localhost day1]# python --version
    Python 3.6.3

    注意:python2和python3的区别

    1. 第一个python程序

      python的源代码文件是以".py"为后缀。下面打印字符串"hello world"。

    #!/usr/bin/env python
    if __name__=="__main__":        #相当于C语言中的main()函数,是python程序的入口
            print("hello world")

    [root@localhost day1]# python 1.py

    hello world

     注意:关于if __name__=="__main__"的解释如下:

    一个.py文件,如果是自身在运行,那么他的__name__值就是"__main__";

    如果它是被别的程序导入的(作为一个模块),比如:
    import re
    那么,他的__name__就不是"__main__"了。

    所以,在.py文件中使用这个条件语句,可以使这个条件语句块中的命令只在它独立运行时才执行

    2. python必须知道的基础语法

      2.1 python的文件类型

      python文件类型分为3种,分别是源代码、字节代码、优化代码。这些代码可以直接运行,不需要进行编译或者链接。这正是python这么语言的特性。python的文件通过python解释器解释运行,windows有python.exe与pythonw.exe,一般安装在路径C:python33中,当然也可以改变它的路径,只要保证环境变量设置正确即可。在Linux系统中,python解释器被安装在目标及其的/usr/local/bin/python目录下,将/usr/local/bin路径放进shell的搜索路径中,即可通过python命令在shell中调用。例:python  xxx.py

      2.1.1 源代码

      python源代码的扩展名以py结尾,可在控制台下运行.python语言写的程序不需要编译成二进制代码,可以直接运行源代码。pyw是windows下开发图像用户接口的源文件,作为桌面应用程序的后缀名。这种文件是专门用于开发图形界面的,由pythonw.exe解释运行。以py和pyw为后缀名的文件可以用文本工具打开,并修改文件的内容。

      2.1.2 字节代码

      python源文件编译后生成pyc后缀的文件,pyc是编译过的字节文件,这种文件不能使用文本编辑工具打开或修改。pyc文件是与平台无关的,因此python的程序可以运行在windows、Unix、linux等操作系统上。py文件直接运行后即可得到pyc类型的文件,或通过脚本生成改类型的文件。下面这段脚本可以把hello.py编译为hello.pyc。

    #!/usr/bin/env python
    import py_compile
    py_compile.compile("hello.py")
    [root@localhost day1]# python hello.py
    [root@localhost day1]# ls
    hello.py  hello.pyc

      2.1.3 优化代码

       扩展名为pyo的文件是优化过的源文件,pyo类型的文件需要用命令行工具生成。pyo文件也不能使用文本编辑工具打开或者修改。下面把hello.py编译成hello.pyo

    #!/usr/bin/env python
    import py_compile
    py_compile.compile("hello.py")
    [root@localhost day1]# python -O hello.py 
    [root@localhost day1]# ls
    hello.py  hello.pyo

    参数“-O”表示生成优化代码。

       2.2 python的编码规范

      1. 变量名、包名、模块名

      变量名、包名、模块名通常采用小写,可使用下划线。

    #Filename: ruleModule.py   #声明模块的名称,模块名采用小写。也可以不指定模块名,以py后缀的文件就是一个模块,模块名就是文件名
    
    _rule = "rule information"    #定义一个全局变量_rule。               

      2. 类名、对象名

      类名的首字母采用大写,对象名采用小写。类的属性和方法以对象作为前缀类的私有变量、私有方法以两个下划线作为前缀。下面这段代码演示了类的定义和实例化的规范写法。

    #!/usr/bin/env python
    class Student:    #类名大写
            __name = ""    #私有实例变量前必须有两个下划线
            def __init__(self,name):
                    self.__name = name    #self相当于java中的this
            def getName(self):      #方法名首字母小写,其后每个单词的首字母大写
                    return self.__name
    
    if __name__ == "__main__":
            student = Student("borphi")     #对象名小写
            print(student.getName())
    [root@localhost day1]# python hello.py 
    borphi

      3. 函数名

       函数名通常采用小写,并用下划线或单词首字母大写增加名称的可读性,导入的函数以模块名作为前缀。下例中,为了演示导入函数前缀写法,使用了生产随机数的模块random,改模块有一个函数randrange()。该函数可以根据给定的数字范围生成随机数。randrange()声明如下:

      randrange(start , stop[ , step])

      参数step表示从start开始往后的步数。生成的随机数在[start , stop-1]的范围内。如[1,20] 取值范围是1--19。

    #!/usr/bin/env python
    import random    #导入random模块
    
    def compareNum(num1,num2):    #定义一个函数compareNum(),两个参数
            if(num1 > num2):
                    return 1
            elif(num1 == num2):
                    return 0
            else:
                    return -1
    num1 = random.randrange(1,9)  
    num2 = random.randrange(1,9)
    print("num1 =",num1)
    print("num2 =",num2)
    print(compareNum(num1, num2))     #调用函数传入两个随机参数
    [root@Dannyserver danny]# python 1.py 
    num1 = 3
    num2 = 5
    -1

       2.2.2 代码缩进与冒号

      代码缩进是指通过在每行代码输入空格或制表符的方式,表示每行代码之间的层次关系。python独有的方式,通过缩进分隔代码块。python对代码的缩进要求非常严格。如果不采用代码缩进风格,将会抛出一个IndentationError的错误。

       

      2.2.3 模块的导入规范

       在python中,如果需要在程序中调用标准库或其他第三方库的类,需要先使用import或from..import...语句导入相关的模块。

      1. import语句

      例:使用import语句导入sys模块,并打印相关内容。 

    #!/usr/bin/env python
    import sys     #导入sys模块,sys模块是处理系统环境的函数的集合
    print(sys.path)  #输出python环境下的查找路径的集合,python默认会查找sys.path返回的目录列表
    print(sys.argv)  #sys.argv是存储输入参数的列表。默认情况下,argv自带的参数是文件名
    
    [root@localhost danny]# python import_sys.py 
    ['/home/danny', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', 
    '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages',
    '/usr/lib64/python2.6/site-packages/gst-0.10', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib64/python2.6/site-packages/webkit-1.0',
    '/usr/lib/python2.6/site-packages'] ['import_sys.py']

      2. from...import...语句

      使用from...import...语句导入与使用import语句导入的区别是前者只导入模块中的一部分内容,并在当前的命名空间中创建导入对象的引用;而后者在当前程序的命名空间中创建导入模块的引用,从而可以使用“sys.path”的方式调用sys模块的内容。

    from sys import path
    from sys import argv
    print(path)    #可以直接调用打印path列表的内容,没有模块名的限定。
    print(argv)    #但这种写法不太规范,如果程序比较复杂,导入了很多模块,还是用sys.path可以明确path和argv来自哪儿个模块

      2.2.4 使用空行分隔代码

      函数之间或类之间用空行分隔,表示一段新的代码的开。便于阅读。例:

    #!/usr/bin/env python
    #coding:utf8          #中文编码,是程序能识别中文
    class A:
            def funX(self):
               print("funY()")
                                                     #空行
            def funY(self):
               print("funY()")
                                                     #空行
    if __name__ == "__main__":
            a=A()
            a.funX()
            a.funY()
    print("哈哈哈")

      例题:编写一个比较两个数字大小的函数。

    #!/usr/bin/env python
    #coding:utf8
    def compareNum(num1,num2):
            if(num1>num2):
                    return str(num1)+">"+str(num2)
            elif(num1<num2):
                    return str(num1)+"<"+str(num2)
            elif(num1==num2):
                    return str(num1)+"="+str(num2)
            else:
                    return "呵呵"
    
    num1=1
    num2=2
    print(compareNum(num1,num2))
    num1=2
    num2=1
    print(compareNum(num1,num2))
    num1=2
    num2=2
    print(compareNum(num1,num2))
    [root@localhost danny]# python def_1.py 
    1<2
    2>1
    2=2

    本段代码中的str()函数实现了数字类型到字符串类型的转换。

      2.2.5 语句的分隔

      在C、java等语言中标示语句结束的标识是分号。python也支持分号,同样可以用分号作为一行语句的结束标识。但在python中分号的作用没C、java中那么重要了,python中的分号可以省略,主要通过换行来识别语句的结束。例如:以下两行代码是等价的。

    print("hello world!")
    print("hello world!");

    python同样支持多行写一条语句,python使用""作为换行符,在实际应用中,一条语句卸载多行也是很常见的。例如,把SQL语句作为参数传递给函数,由于SQL非常长,因此需要换行书写。

    #写法一
    sql = "select id,name" 
    from dept 
    where name = 'A'"
    print (sql)
    
    # 写法二
    sql = "select id,name" 
            "from dept" 
            "where name = 'A'"
    print (sql)     

     2.3 变量和常量

       2.3.1 变量的赋值

      python中的变量不需要声明,变量的赋值操作即是变量的声明和定义的过程。

      python还支持对一些变量同时赋值的操作,例如:

    a = (1,2,3)
    (x,y,z) = a
    print ("x=",x)
    print ("y=",y)
    print ("z=",z)
    [root@Dannyserver danny]# python 1.py 
    x= 1
    y= 2
    z= 3

    提示:注意python版本问题,本文所有实验都是在python3上做的。

       2.3.2 局部变量

      局部变量的作用范围只在其被创建的函数内有效。

    #!/usr/bin/env python
    def fun():      
            local = 1       #局部变量,只在函数内生效
            print(local)
    fun()           #调用函数

      2.3.3 全局变量

      全局变量是能够被不同的函数、类或文件共享的变量,在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。

    全局变量通常在文件的开始处定义。下面定义了两个全局变量_a , _b 和两个函数add() , sub(),这两个函数将调用全局变量执行加减法运算。

    _a=1
    _b=2
    def add():
            global _a           #用global调用全局变量,如果修改值,则全文局变量值都会改变
            _a=3
            return "_a + _b =",_a+_b
    def sub():
            global _b
            _b = 4
            return "_a -_b =",_a-_b
    print(add())
    print(sub())
    
    print(_a)
    print(_b)
    [root@Dannyserver danny]# python 1.py 
    ('_a + _b =', 5)
    ('_a -_b =', -1)
    3      #通过调用global调用修改,导致全局变量已经改变
    4

    提示:应该尽量避免使用全局变量。因为不同的模块都可以自由访问全局变量。可能会发生一方修改导致全部文件数据都更改。

  • 相关阅读:
    nginx利用image_filter动态生成缩略图
    uva 624 CD 01背包打印路径
    【剑指Offer学习】【全部面试题汇总】
    POJ2096-Collecting Bugs(概率DP)
    配置struts tags 输出HTML
    合并基因表达水平(merge gene expression levels, FPKM)
    设置MySQL自动增长从某个指定的数开始
    列联表(Crosstabs)
    mysql 实现行号的方法——如何获取当前记录所在行号
    shell 标出输入、标准输出、错误输出
  • 原文地址:https://www.cnblogs.com/dannylinux/p/8119618.html
Copyright © 2020-2023  润新知