zoukankan      html  css  js  c++  java
  • Python笔记1

    一、关于python的一些介绍

    1、了解编译型与解释型语言

    (此区别可理解为从源程序到程序运行过程来看)

    编译:将源程序翻译成可执行的目标代码,翻译与执行是分开的。

    解释:对源程序的翻译与执行一次性完成,不生成可存储的目标代码。

    上述只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。

    举个例子:

    假如你打算阅读一本外文书,而你不知道这门外语,那么你可以找一名翻译,给他足够的时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读;或者,你也立刻让这名翻译辅助你阅读,让他一句一句给你翻译,如果你想往回看某个章节,他也得重新给你翻译。

    2、了解动态语言和静态语言

    此区别可理解为从数据类型来看)

    动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言。

    静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的。

    用动态类型的语言编程:

    永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby、VBScript属于动态类型语言。

    用静态类型的语言编程:

    在写程序时要声明所有变量的数据类型。C、C++、C#、JAVA等语言属于静态类型语言。

     

    3、了解强类型定义语言和弱类型定义语言

     

    强类型定义语言:强制数据类型定义的语言。一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

     

    举个例子:

    如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

     

    弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

     

    强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

    另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
    python是一门动态解释性的强类型定义语言。

    4、了解python的解释器

    我们编写Python代码,写的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。常用的python解释器为cpython、除此外还有ipython、pypy等。

    CPython:当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

    5、了解python2与python3的区别

    此处不做深究,只要知道现在流行有两种python版本:分别为python2.x及python3.x即可。后续的编程大部分情况下都是在python3.x版本下进行。

    二、Python3.7的安装过程

    1、安装包的下载

    登录python官网 https://www.python.org/downloads/ 在相应的界面选择版本下载。此处我们选择下载gzip的源码包在linux系统中安装。

     

    2、上传安装包

    使用rz将安装包放到linux系统的相应目录下,此处不展开说明如何使用rz。

    3、安装GCC

    安装gcc建议的操作为使用yun groupinstall 安装开发工具(development tools)来安装GCC。

    先使用yum grouplist查看系统中是否安装了GCC(阿里提供的一个yum源,http://mirrors.aliyun.com/help/centos)

    使用yum groupinstall指令来安装Development Tools

    通过上述步骤,GCC已经安装完成。

    4、解压及预配

    加压上传进linux的tgz包,使用指令tar -zxvf ,进入文件夹执行configure文件配置安装的目录./configure --prefix=/usr/local/python3.6.3

       

    5、编译及安装

    ./执行完成后,使用make&make install来编译安装,编译过程会调用gcc。

    在安装过程中经常会出现报错,如此处就报错没有zlib,需要我们安装zlib。

    没有zlib那就安装zlib,使用yum install zlib* -y 。注意yum源中存在对zlib版本的情况(建议用光盘的yum 源进行安装,如果配置了一些网络yum源建议先去掉yum配置文件,之后yum clean all)

    安装完成后,再make&make install 编译安装即可完成。

    注:如果存在多个版本zlib导致安装过程中报错使用yum install -y zlib zlib-devel --setopt=protected_multilib=false来安装

    注:在python3.6中不能使用方向键会出现乱码的情况,需要安装yum -y install readline-devel,然后再重新编译python即可解决。

     6、添加环境变量

    vi cat /etc/profile
    PATH=/usr/local/python3.6.3/bin:$PATH
    export PATH
    -----------------
    #或者做一个软连接连接这个python3
    ln -s /usr/python/bin/python3 /usr/bin/python3

    三、HELLO WORLD与变量

    1、第一个python程序,HELLO WORLD

    1 #!/bin/env python3.6 
    2 print("Hello python")
    3 print('Hello python')
    4 print('"Hello python"')
    5 print("'Hello python'")
    -----------------------------------
    Hello python
    Hello python
    "Hello python"
    'Hello python

    #!的作用:在linux系统中如果需要用./来执行此py程序的话,系统默认使用bash来执行。bash解释器执行的是shell脚本,并不能执行python程序。所以此处需要用#!告诉系统在./运行该程序的时候使用什么解释器。我们需要使用cpython解释器来解释我们写的代码,所以此处写上我们cpython解释器的位置。(使用which指令可以查看指令的完整位置,可以使用/bin/env python或/bin/env bash来指定解释器)

    hello world的程序的注意点:单引号与双引号的使用并不影响输出效果,单引号和双引号的结合使用,用来输出需求的符号。

    2、变量

    变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。

     

    变量的使用方式:变量名=赋值

    1 #!/bin/env python3.6
    2 name1 = "Zhang San"
    3 name2 = name1
    4 name1 = "Li Si"
    5 print("name1 is",name1,"name2 is",name2)
    -----------------------------------------------
    name1 is Li Si name2 is Zhang San

    该程序的注意点:此程序中有两个变量,分别是name1、name2,需要捋清楚的关系是name1 -赋值-> name2后,修改了name1的内容,此时对name2并没有影响。

    变量定义的规则:

    • 变量名只能是字母、数字或下划线的任意组合,_123 这种格式的变量也是可以的
    • 变量名的第一个字符不能是数字
    • 以下关键字不能声明为变量名
    • 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'

    变量命名的规范:

    • python中没有常亮的概念,所以如果定义了一个变量,希望这个变量被用作常量,在下文的代码中不去进行修改时,我们常用全大写字母的方式来表示此变量为常量,如:CHANGLIANG=10010
    • 写变量名要明确,一眼就能明白这个变量要用来做什么,常用下划线和驼峰写法来明确表示变量名,如:Tom_name、TomAge、TomSchool

    四、字符编码与代码注释的方法

    1、字符编码的发展

    ascill 255 8位 1bytes

              ->1980 gb2312 7xxx汉字

                  ->1995 GBK1.0 2w+汉字

                     ->2000 GB18030 27xxx汉字

                  -> unicode 2bytes 万国码、统一码,单一码

                     ->utf-8  en:1bytes, zh:3bytes

    Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生

    2、两种注释方式

    行注释: #注释的内容

    批量注释及引用 """注释的内容"""/'''注释的内容'''

    #!/usr/local/python3.6.3/bin/python3.6
    #_*_coding:utf-8_*_
    username = input("username:") password = input("your password:") #imput的使用方法 text=""" 使用三个单引号或双引号能注释,很多行 用双引号 不仅能注释 还能给变量赋值 """ text2=''' 单引号也可以的 '''
    --------------------------------
    username:yomi
    your password:123
    yomi 123
    使用三个单引号或双引号能注释,很多行
    听说
    用双引号
    不仅能注释
    还能给变量赋值
     
    单引号也可以的

    3、#_*_coding:utf-8_*

    python解释器在加载 .py 文件中的代码时,会对内容进行编码,

    Python2 默认将变量转换成ascill编码,python3默认将变量转换为unicode编码,由于ascill无法表示中文,所以会出现报错,故python2在运行带中文字符的py文件的时候需要加上#_*_coding:utf-8_*_ ,来告诉python解释器,编译为utf-8的格式。

    五、用户交互程序(input、getpass)

    1、input的使用

    格式:name = input("name:")

    2、getpass的使用

    使用getpass时需要先导入getpass模块

    格式:import getpass

    password = getpass.getpass("password:")

    3、字符串拼接的多种写法

    方法一、逗号写法

    print("name1 is",name1,"name2 is",name2)

    方法二、加号写法

    1 text = """
    2 -------- information of """ +name+"""--------
    3 age is"""+age+"""
    4 level is """+level
    5 
    6 print(text)

    方法三、百分号写法

    1 infor="""
    2 ----information of %s ----
    3 name is %s
    4 age is %s
    5 salary is %s
    6 """%(name,name,age,salary) #直接写不予要有逗号
    7 print(infor)
    ----------------------------------------
    %s,用来输出一个字符串
    %d,用来输出十进制整数

    方法四、花括号定义变量写法

    text2="""
    ---imformation of {_name}--- #注意不能用中括号
    name is {_name}
    age is {_age}
    salary is {_salary}
    """.format(_name=name,_age=age,_salary=salary)
    print(text2)

    方法五、花括号数字写法

    1 text3="""
    2 ---imformation of {0}--- #引号中用井号并不能起到注释作用,就像现在这样
    3 name is {0}
    4 age is {1}
    5 salary is {2}
    6 """.format(name,age,salary)
    7 print(text3)

    一段综合

     1 import getpass
     2 name = input("your name:")
     3 age = int(input("your age:")) #定义整形
     4 salary = getpass.getpass("input your salary:")
     5 print ("age参数的类型为:",type(age),"salary参数的类型为:",type(salary))
     6 salary = int(salary)
     7 print ("age参数的类型为:",type(age),"salary参数的类型为:",type(salary))
     8 text="""
     9 ---imformation of %s---
    10 name is %s
    11 age is %d
    12 salary is %d
    13 """%(name,name,age,int(salary))
    14 print(text)
    15 text2="""
    16 ---imformation of {_name}--- #注意不能用中括号
    17 name is {_name}
    18 age is {_age}
    19 salary is {_salary}
    20 """.format(_name=name,_age=age,_salary=salary)
    21 print(text2)
    22 text3="""
    23 ---imformation of {0}--- #引号中用井号并不能起到注释作用,就像现在这样
    24 name is {0}
    25 age is {1}yomi
    26 salary is {2}
    27 """.format(name,age,salary)
    28 print(text3)
    ----------------------------------------------------
    your name:yomi
    your age:25
    salary:
    age参数的类型为: <class 'int'> salary参数的类型为: <class 'str'>
    age参数的类型为: <class 'int'> salary参数的类型为: <class 'int'>

    ---imformation of yomi---
    name is yomi
    age is 25
    salary is 50000


    ---imformation of yomi--- #注意不能用中括号
    name is yomi
    age is 25
    salary is 50000


    ---imformation of yomi--- #引号中用井号并不能起到注释作用,就像现在这样
    name is yomi
    age is 25
    salary is 50000

    该程序的注意点:getpass指令在windows环境中使用由问题。需要在linux环境中使用。

    六、判断与循环

    1、if判断

    1 if your_number == REALLY_NUM:
    2     print("so good!")
    3 elif your_number > REALLY_NUM:
    4     print("think bigger")
    5 else :
    6      print("think smaller")

    该程序的注意点:if...elif...elif...else 可以写很多层的elif,后面可以接else。

    2、while 循环

     1 count=0
     2 REALLY_NUM = int("100")
     3 while count < 3 :
     4        your_number = int(input("please input your number:"))
     5        if your_number == REALLY_NUM :
     6            print("woo,you got it!")
     7            break
     8        elif your_number > REALLY_NUM:
     9            print("think bigger!")
    10        else:
    11            print("think smaller")
    12        count = count + 1
    13 else:
    14      print("you have tried too many times,fuck off")

    该程序的注意点:while true或while 变量,变量可以在循环中不断赋值。

    3.for循环(步长)

     1 #!/usr/local/python3.6.3/bin/python3.6
     2 REALLY_NUM = int ("100")
     3 for i in range(0,3,1):
     4      guess_num = int (input("input your number:"))
     5      if guess_num == REALLY_NUM:
     6            print("woo,you got it")
     7            break
     8      elif guess_num > REALLY_NUM:
     9            print("think bigger")
    10      else:
    11            print("think smaller")
    12 #else: print('GAME OVER')
    13 print("GAME OVER")

    该程序的注意点:for后面的括号里可以指定范围和步长,for可以接else,for内的break可以跳出for循环包括此else。注意代码中注释的print及最后一个print的区别。

    4、continue及break

     1 #!/usr/local/python3.6.3/bin/python3.6
     2 for i in range(3):
     3     print("--------",i,"----------")
     4     for i in range(10):
     5          if i > 6:
     6               print (i)
     7          else:
     8             #continue ----如果注释break有事什么情况
     9             break
    10 print("-----------------循环结束---------------")
    ------------------------------------------------------------------

    -------- 0 ----------

    -------- 1 ----------

    -------- 2 ----------

    -----------------循环结束---------------

    该程序的注意点:对比程序中注释掉的continue及break,还有注意程序中两次for循环的i值变化。

    5、三元运算

    1 #!/bin/env python3.6
    2 a= 888 if 100 > 99 else 666
    3 print (a)
    4 x,y,z = 7,8,9
    5 i= x if y>z else z
    6 print (i)
    -----------------------------------
    888
    9

    七、模块初识

    程序运行前,需要将程序中所需要使用的模块先import进去,需要注意的是程序名不能和模块名一致(有些情况下不会报错,但不推荐)

    1、sys模块的简单用法

    sys.path 显示环境变量#不用加()

    1 #!/usr/local/python3.6.3/bin/python3.6
    2 import sys
    3 print(sys.path)
    ------------------------------
    ['/root/myfile/my_python_file','/usr/local/python3.6.3/lib/python36.zip', '/usr/local/python3.6.3/lib/python3.6','/usr/local/python3.6.3/lib/python3.6/lib-dynload', '/usr/local/python3.6.3/lib/python3.6/site-packages'

    sys.argv 显示文件名,并且和后面的其他参数一起转换为列表,这一作用很重要,用来获取参数 #不用加()

    #!/usr/local/python3.6.3/bin/python3.6
    import sys
    print(sys.argv)
    ------------------------------------------

    ./20171117_mod_sys_argv.py hello world 1 2 3

    ['./20171117_mod_sys_argv.py', 'hello', 'world','1','2','3']

    2、os模块的简单用法

    os.system(“系统指令”):执行系统指令,将执行结果输出到屏幕,不能赋值保存

    os.popen(“系统指令”):执行系统指令,将执行结果保存为指针,可以用read()读取

    #!/usr/local/python3.6.3/bin/python3.6
    import os
    os.system("df")#执行并不保存结果
    test = os.popen("df")
    print(test)
    test_read = os.popen("df").read()
    print(test_read)
    -------------------------------------------------------------\
    文件系统          1K-块    已用     可用 已用% 挂载点
    /dev/vda1      20510332 4045968 15415848   21% /
    devtmpfs         932944       0   932944    0% /dev
    tmpfs            942048      24   942024    1% /dev/shm
    tmpfs            942048  250588   691460   27% /run
    tmpfs            942048       0   942048    0% /sys/fs/cgroup
    tmpfs            188412       0   188412    0% /run/user/0
    tmpfs            188412       0   188412    0% /run/user/1000
    <os._wrap_close object at 0x7fcc683da828>  
     文件系统          1K-块    已用     可用 已用% 挂载点
    /dev/vda1      20510332 4045968 15415848   21% /
    devtmpfs         932944       0   932944    0% /dev
    tmpfs            942048      24   942024    1% /dev/shm
    tmpfs            942048  250588   691460   27% /run
    tmpfs            942048       0   942048    0% /sys/fs/cgroup
    tmpfs            188412       0   188412    0% /run/user/0
    tmpfs            188412       0   188412    0% /run/user/100

    os.mkdir(“”) 新建文件夹 os.mkdir("new") 输入文件夹名字即可新建

    八、pvc与python运行的过程

    在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。

    当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

    当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

    所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

    九、Python的数据类型初识及运算

    1、数据类型

    数字:int 整数、float 浮点数、complex复数

    布尔值:真或假/1或0

    字符:‘hello’

    字符串 %s;整数 %d;浮点数%f

    2.算术运算

    算术运算有:加、减、乘、除、取整、求次方的操作

    >>> 10 + 5
    15
    >>> 10-5
    5
    >>> 10 * 5
    50
    >>> 9/2
    4.5
    >>> 9%2
    1
    >>> 9//2
    4
    >>> int(9/2)
    4
    >>> 10 / 3
    3.3333333333333335
    >>> 10 ** 3
    1000
    >>> 10 // 3
    3
    >>> 

    该代码的说明://取整操作的结果和int(x)的结果一致,不是四舍五入,是直接取整

    3、比较运算

    比较运算有:等、 不等于、大于、小于、大于等于、小于等于

    >>> 'aa'=='bb'
    False
    >>> 'aa'!='bb'
    True
    >>> 'aa'>='bb'
    False
    >>> 'aa'<='bb'
    True
    >>> 10 <= 20
    True
    >>> 10 >= 20
    False
    >>> 10 => 20
      File "<stdin>", line 1
        10 => 20
            ^
    SyntaxError: invalid syntax

    该代码的说明:大于等于要写成>=不能写成=>,同理小于等于也是一样。

    4、赋值运算

    主要注意的是缩写:+=、-=、*=、/=这样的形式 ,x+=1 -> x=x+1、x/=3 -> x=x/3

    5、逻辑运算

    与或非三种运算。

    >>> 1>10 and 5>9
    False
    >>> 1>10 and 5<9
    False
    >>> 1>10 or 5<9
    True
    >>> not 1>10 
    True

    6、身份运算

    >>> a=10
    >>> type(a)
    <class 'int'>
    >>> b=10.1
    >>> type(b)
    <class 'float'>
    >>> c='hello'
    >>> type(c)
    <class 'str'>
    >>> a is int
    False
    >>> type(a) is int
    True
    >>> d=[1,2,3]
    >>> type(d) is list
    True
    >>> 

    7、成员运算

    >>> d=[1,2,3]
    >>> type(d) is list
    True
    >>> 
    >>> 3 in d
    True
    >>> 4 in d
    False
    >>> 999 not in d
    True
    >>> 

    8、位运算

    注意位运算为2的倍数,不是平方、指数上升

    >>> 10 <<1
    20
    >>> 10 << 1
    20
    >>> 10 << 2
    40
    >>> 10 << 4
    160
    >>> 10 >> 4
    0
    >>> 160 >> 4
    10

    9、各种运算之间的优先级

    计算机能表示的最小单位是二进制位:bit

    计算机能存储的最小单位是一个二进制位:bit

     

     

     

     

  • 相关阅读:
    2017沈阳站 Tree
    P2146 [NOI2015]软件包管理器
    hdu3307 欧拉函数
    poj 3126 Prime Path bfs
    CSL的字符串
    P1045 麦森数
    洛谷 P1338 末日的传说
    树链剖分
    SQL[Err] ORA-00933: SQL command not properly ended
    Postman 快速入门之脚本
  • 原文地址:https://www.cnblogs.com/yomi/p/7906835.html
Copyright © 2011-2022 走看看