美文网首页
python基础

python基础

作者: 程一川 | 来源:发表于2017-06-24 11:38 被阅读71次

    一、输入与输出

    1、print打印

    (1)打印字符串:%s

    >>> name = "yisan"
    >>> print ("hello %s,Nice to meet you!!"  %name)
    hello yisan,Nice to meet you!!
    

    (2)打印数字:%d

    >>> age = 26
    >>> print ("You are %d"  %age)
    You are 26
    

    (3)若不知道打印内容的类型:%r

    >>> n = 100
    >>> print ("You print is %r"  %n)
    You print is 100
    
    >>> name = "yisan"
    >>> age = 26
    >>> print ("student info : %s %d"  %(name,age))
    student info : yisan 26
    

    2、input输入

    n = input("Enter any content:")
    print ("your input is %r"  %n)
    

    按F5快捷键运行程序,当运行到input()时,需要用户输入一些信息,用print打印出来(python2中使用:raw_input()代替input()):

    Enter any content:tom
    your input is 'tom'
    

    3、引号与注释

    (1)引号:
    python中,不区分单引号(' ')与双引号(" "),都用来表示一个字符串:

    >>> print("hello")
    hello
    >>> print('world')
    world
    

    单引号与双引号可以互相嵌套使用,但不能交叉使用:

    >>> print("你说:'早上好'")
    你说:'早上好'
    >>> 
    >>> print("你向我微笑'向我问好"。')
          
    SyntaxError: invalid character in identifier
    

    (2)注释:

    >>> #单行注释
    >>> print("hello world")#打印hello world
    hello world
    
    多行注释:用"""     """
    """
    你好,
    早上好
    中午好
    下午好
    晚上好
    """
    

    二、分支与循环

    1、if 语句:

    >>> a = 2
    >>> b = 3
    >>> if a > b:
        print("a max")
    else:
        print("b max")
    
        
    b max
    

    python中的if语句通过“==”运算符判断相等,通过“!=”判断不相等:

    >>> student = "yisan"
    >>> if student == "yisan":
        print("yisan,You are on duty today.")
    else:
        print("Please call yisan to duty.")
    
        
    yisan,You are on duty today.
    

    python中,用“in”和“not in”表示包含关系:

    >>> hi = "Hello,World!!!"
    >>> if "Hello" in hi:
        print("Contain")
    else:
        print("Not Contain")
    
        
    Contain
    

    if语句可以进行布尔类型的判断:

    >>> a = True
    >>> if a:
        print("a is True")
    else:
        print("a is not True")
    
        
    a is True
    

    demo:

    results = 75
    if results >=90:
        print("优秀")
    elif results>=70:
        print("良好")
    elif results>=60:
        print('及格')
    else:
        ptiny('不及格')
    

    2、for语句

    >>> for i in "Hello,World!!!":
        print(i)
    
        
    H
    e
    l
    l
    o
    ,
    W
    o
    r
    l
    d
    !
    !
    !
    
    >>> fruits = ['banana','apple','mango']
    >>> for fruit in fruits:
        print(fruit)
    
        
    banana
    apple
    mango
    

    range()函数默认从0开始循环:

    >>> for i in range(5):
        print(i)
    
        
    0
    1
    2
    3
    4
    

    range()函数也可以设置起始位置和步长,如打印1到10之间的奇数:

    >>> for i in range(1,10,2):
        print(i)
    
        
    1
    3
    5
    7
    9
    

    三、数组与字典

    1、数组

    数组用方括号([ ])表示,里面的每一项用逗号(,)隔开

    >>> lists = [1,2,3,'a',4]
    >>> lists
    [1, 2, 3, 'a', 4]
    >>> lists[0]
    1
    >>> lists[3]
    'a'
    >>> lists[4]
    4
    >>> lists[4]='b'
    >>> lists[4]
    'b'
    >>> lists.append('c')
    >>> lists
    [1, 2, 3, 'a', 'b', 'c']
    

    2、字典

    字典用花括号({ })表示,里面的项成对出现,一个key对应一个value;key与value之间用(:)分隔;不同的项之间用逗号(,)分隔

    >>> dicts = {"username":"yisan",'password':123456}
    >>> dicts.keys()
    dict_keys(['username', 'password'])
    >>> dicts.values()
    dict_values(['yisan', 123456])
    >>> dicts.items()
    dict_items([('username', 'yisan'), ('password', 123456)])
    >>> for k,v in dicts.items():
        print("dicts keys is %r"  %k)
        print("dicts values is %r"  %v)
    
        
    dicts keys is 'username'
    dicts values is 'yisan'
    dicts keys is 'password'
    dicts values is 123456
    

    注意:python字典中,key必须独一无二,value可以相同
    keys()函数返回字典key的列表
    values()函数返回字典中value的列表
    items()函数将所有的字典项以列表的方式返回,这些列表中的每一项都包含key和value,但是项在返回时并不会按照他们在字典中的存放顺序。如果想按照存放的顺序输出,可通过下面的方式:

    #通过zip方法合并两个List为Dictionary
    #遍历会按原先的顺序
    keys = ["b","a","c","e","d"]
    values = ["2","1","3","5","4"]
    for key,value in zip(keys,values):
        print(key,value)
    
    输出结果:
    =======RESTART: C:/Users/川/Desktop/test.py ========
    b 2
    a 1
    c 3
    e 5
    d 4
    

    四、函数、类和方法

    1、函数

    在python中,通过def关键字来定义函数:

    >>> def add(a,b):
        print(a+b)
    
    >>> add(3,5)
    8
    
    >>> def add(a,b):
        return a+b
    
    >>> add(2,5)
    7
    
    >>> def add(a=1,b=2):
        return a+b
    
    >>> add()
    3
    >>> add(3,5)
    8
    

    2、类和方法

    python中,用class关键字来创建类

    class A(object):   #python3中object可以不用声明
        def add(self,a,b):
            return a+b
    count = A()
    print(count.add(3,5))
    
    输出结果:
    ============ RESTART: C:/Users/川/Desktop/test.py ============
    8
    

    上面创建了一个A类,在类下面创建了一个add()方法,方法的创建使用def关键字,方法的第一个参数必须是存在的,一般习惯命名为“self”,但是调用这个方法时,不需要为这个参数传值。

    一般在创建类时会首先声明初始化方法init():

    class A(object):
        def __init__(self,a,b):
            self.a = int(a)
            self.b = int(b)
        def add(self):
            return self.a+self.b
    count = A('4',5)
    print(count.add())
    
    输出结果:
    ============ RESTART: C:/Users/川/Desktop/test.py =============
    9
    

    当调用A类时,首先执行init()方法进行初始化,将输入的参数类型转化为int类型,用来保证程序的容错性。add()方法可以直接拿初始化方法init()的self.a和self.b两个数进行计算

    2、继承

    class A():
        def add(self,a,b):
            return a+b
    
    class B(A):
        def sub(self,a,b):
            return a-b
    print(B().add(4,5))
    print(B().sub(5,4))
    
    输出结果:
    ============RESTART: C:/Users/川/Desktop/test.py =============
    9
    1
    

    B类继承了A类,所以B类 拥有了add()方法,从而B类可以直接调用add()方法

    五、模块

    1、引用模块

    在python中,通过import...或from...import...的方式引用模块,例如:

    import time
    print(time.ctime())
    
    输出结果:
    ===========RESTART: C:\Users\川\Desktop\test.py =============
    Sat Jun 24 21:48:34 2017
    

    或:

    from time import ctime
    print(ctime())
    
    输出结果:
    ============RESTART: C:\Users\川\Desktop\test.py =============
    Sat Jun 24 21:50:45 2017
    

    又如:

    from time import *
    print(ctime())
    print("休眠两秒")
    sleep(2)
    print(ctime())
    
    输出结果:
    ============RESTART: C:\Users\川\Desktop\test.py ===========
    Sat Jun 24 21:53:43 2017
    休眠两秒
    Sat Jun 24 21:53:45 2017
    

    星号“*”表示模块下的所有方法

    2、模块调用

    python中,既可以调用系统模块,也可以调用自己创建的模块:
    创建一个目录project,并在目录下创建两个文件:
    project/
    |----pub.py
    |__count.py

    在pub.py文件中创建add函数:

    pub.py:

    def add(a,b):
        return a+b
    

    在count.py中调用pub.py文件中的函数add():

    count.py:

    from pub import add
    print(add(4,5))
    
    输出结果:
    =============RESTART: D:\project\count.py =================
    9
    

    以上就实现了跨文件的函数调用。

    3、跨目录模块调用(1)

    如果调用文件与被调用文件在一个目录下面,则可以非常方便的调用。如果被调用的文件与调用文件不在同一个目录下呢?假设文件目录结构如下:
    project/
    |-----model/----pub.py
    |
    |_____count.py

    count.py

    from model.pub import add
    print(add(4,5))
    
    输出结果:
    ==============RESTART: D:\project\count.py =================
    9
    

    4、跨目录调用(2)

    当项目变得复杂之后,需要涉及多个文件目录之间的调用,结构如下:

    图片.png

    count.py

    class A():
        def add(self,a,b):
            return a+b
    

    new_count.py

    from count import A
    class B(A):
        def sub(self,a,b):
            return a-b
    result = B().add(2,5)
    print(result)
    
    输出结果:
    ============ RESTART: D:\project\model\new_count.py ============
    7
    

    test.py

    from model import new_count
    test = new_count.B()
    test.add(2,5)
    
    输出结果:
    Traceback (most recent call last):
      File "D:\project\test.py", line 1, in <module>
        from model import new_count
      File "D:\project\model\new_count.py", line 1, in <module>
        from count import A
    ImportError: No module named 'count'
    

    执行test.py时,会报错,提示在new_count.py中找不到“count”模块,是因为:
    站在new_count.py的位置,执行“from count import A”时,可以找到“count”文件,但是站在test.py的位置执行“from count import A”时,就找不到“count”文件了。
    修改test.py文件如下:

    import sys
    sys.path.append("./model")  #将model目录添加到系统变量path下
    from model import new_count
    test = new_count.B()
    test.add(2,5)
    
    输出结果:
    ================RESTART: D:\project\test.py ==================
    7
    

    六、异常

    1、认识异常

    如下异常情况:

    >>> open("abc.txt",'r')
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        open("abc.txt",'r')
    FileNotFoundError: [Errno 2] No such file or directory: 'abc.txt'
    

    提示:No such file or directory: 'abc.txt'(没有abc.txt这样的文件或目录),可以用python提供的try...except...语句来 接受并处理这个异常:

    >>> try:
        open("abc.txt",'r')
        except FileNotFoundError:     
        print("异常了!")
    
    输出结果:   
    异常了!
    

    又如:

    try:
        print(aa)
    except NameError:
        print("这是一个name异常!")
    
    输出结果:
    =============RESTART: C:\Users\川\Desktop\test.py =============
    这是一个name异常!
    

    在python中,所有的异常类型都继承Exception,所以可以使用它来接受所有类型的异常:

    try:
        open("abc.txt",'r')
    except Exception:
        print("异常了!!")
    
    输出结果:
    ===========RESTART: C:\Users\川\Desktop\test.py ==============
    异常了!!
    

    从python2.5版本之后,所有异常类型都有了新的基类BaseException。Exception同样也继承自BaseException,所以我们也可以使用BaseException来接收所有类型的异常:

    try:
        open("abc.txt",'r')
        print(123)
    except BaseException:
        print("异常了!!!")
    
    输出结果:
    ============ RESTART: C:\Users\川\Desktop\test.py =============
    异常了!!!
    

    对于上面的例子,打印异常时,我们并不知道到底哪一行代码起了异常,可以通过下面的方法让python直接告诉我们异常的原因:

    try:
        open("abc.txt",'r')
        print(123)
    except BaseException as msg:
        print(msg)
    
    输出结果:
    =========== RESTART: C:\Users\川\Desktop\test.py ==============
    [Errno 2] No such file or directory: 'abc.txt'
    

    我们在BaseException后面定义了msg变量来接收异常信息,并通过print将其打印出来。此处写法与python2有所不同,在python2中用逗号“,”代替“as”
    python中常见的异常如下表所示:

    | 异常 | 描述 |
    |----------------------|------------------------------------------------------------- :|
    |BaseException |新的所有异常类型的基类 |
    |Exception |所有异常类型的基类,但继承BaseException类 |
    |AssertionError |assert语句失败 |
    |FileNotFoundError|试图打开一个不存在的文件或目录 |
    |AttributeError |试图访问的对象没有属性 |
    |OSError |当系统函数返回一个系统相关的错误,包括I/O故障,如找不到文件或磁盘已满时,引发此异常 |
    |NameError |使用一个还未赋值对象的变量 |
    |IndexError |当一个序列超出了范围 |
    |SyntaxError |当解析器遇到一个语法错误时引发 |
    |KeyboardInterrupt|Ctrl+C被按下,程序被强行终止 |
    |TypeError |传入的对象类型与要求不符 |

    2、更多异常用法

    下面来学习异常的更多用法:try....except与else配合使用:

    try:
        aa = "异常测试"
        print(aa)
    except BaseException as msg:
        print(msg)
    else:
        print("没有异常!")
    
    输出结果:
    ============RESTART: C:\Users\川\Desktop\test.py ==============
    异常测试
    没有异常!
    

    else语句只有在没有异常的情况下才会被执行,但是有些情况下,无论是否出现异常,操作都希望被执行,如文件的关闭、锁的释放、把数据库连接返还给连接池等操作 ,可以通过使用try...except...finally...语句来实现这样的需求:

    try:
        print(aa)
    except Exception as e:
        print(e)
    finally:
        print("不管是否异常,我都会被执行。")
    
    输出结果:
    ============ RESTART: C:\Users\川\Desktop\test.py =============
    name 'aa' is not defined
    不管是否异常,我都会被执行。
    

    又如:

    try:
        aa = "异常测试"
        print(aa)
    except Exception as e:
        print(e)
    finally:
        print("不管是否异常,我都会被执行。")
    
    输出结果:
    =============RESTART: C:\Users\川\Desktop\test.py ==============
    异常测试
    不管是否异常,我都会被执行。
    

    3、抛出异常

    print()方法只能打印错误信息,python中提供了raise方法来抛出一个异常信息:

    from random import randint
    #生成一个1到9之间的随机整数
    number = randint(1,9)
    if number %2 ==0:
        raise NameError("%d is even" %number)
    else:
        raise NameError("%d is odd" %number)
    
    输出结果:
    ============= RESTART: C:\Users\川\Desktop\test.py ============
    Traceback (most recent call last):
      File "C:\Users\川\Desktop\test.py", line 5, in <module>
        raise NameError("%d is even" %number)
    NameError: 6 is even
    

    通过randinnt()方法随机生成1到9之间的整数,然后判断这个数字时奇数还是偶数,最后通过raise抛出NameError异常。(注:判断奇偶数与NameError之间没有任何关系,这里只是演示如何通过raise抛出各种类型的异常)

    续:

    1、全局变量global的用法

    python 中使用 global 来设置全局变量,如下:

    global a
    a=1
    def change():
      print(a)
    

    也就是说,声明一个全局变量,首先要在方法外的地方声明一个变量,然后在方法内使用它的时候,先要对这个变量声明下 global , 然后再进行修改,否则会人会你声明的是一个方法内的局部变量。

    相关文章

      网友评论

          本文标题:python基础

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