• Python简明教程


    Python简明教程

    Python一小时快速入门

    1.Python简介

     
    pylogo.png

    Python是一种相当高级的解释性程序设计语言,完成同一个任务C语言可能需要几千行代码
    Java要写100行,Python可能只需要20行。

    用Python可以做什么?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。

    Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。

    但是,对于初学者和完成普通任务,Python语言是非常简单易用的。

    python提供了完善的内置库,覆盖了网络、文件、GUI、数据库、文本等大量内容,用python开发,很多功能不必从零编写,直接使用现成的即可。

    除了内置库外,Python还有大量第三方库,也就是别人开发的,可以直接使用的。当然如果你的代码封装的很好,也可以作为第三方库给别人使用。

    python适合开发网络应用、日常小工具、科学计算等活动。

    2.安装Python

    Python有两个版本,2.x和3.x互不兼容,按需求安装即可。
    安装教程参考我的Ananconda简单入门

    python解释器:我们写的代码会在解释器上运行,类似JVM的机制,我们安装的标准解释器是用C编写的,称为CPython解释器,另外有IPython 是基于CPython交互解释器。还有Java写的Jpython解释器等等。我们一般使用Cpython。

    3.python环境基本操作

    基本上有两种操作Python的方式,命令行模式交互模式
    命令行模式就是正常的shell终端操作,输入命令

     
    prompt.png


    执行xxx.py
    交互模式指每输入一条语句将会得到实时反馈。
    在命令行中输入

    python 
    

    即可看到命令行变成如下样式,行前有>>>提示符。

     
    interactive.png


    交互模式下输入语句会得到实时反馈,而不用输入输出函数。
    输入exit()退出交互模式。
    我们在交互模式下写出第一个程序

    print('Hello World')
    
     
    helloworld.png

    下面我们尝试在命令行模式写一个程序。
    打开你喜欢的文本编辑器,写下

    print('Hello World!
    ')
    

    保存为hello.py文件
    在命令行中切换到文件所在目录,输入

    python hello.py
    python xxx.py
    

    即可执行文件

     
    excute.png

    输入和输出
    输出print()是一个python内置函数,可以直接输出括号里的对象。

    x=3.14
    print(x)
    mingzi='Mark'
    print(mingzi)
    print(300+500)
    print('name')
    

    print()也可以打印多个字符串

    print(name,age,school)//用逗号隔开
    
     
    输出.png


    输入 input()同样也是python内置函数

    x=input('请输入内容:')
    括号内可以写提示语,`input()`收到键盘输入后会创建一个对应类型对象。
    print(x)
    
     
    输入.png

    输入输出组合起来就可以实现一些小交互操作了

    name=input('请输入姓名:
    ')
    print('你的名字是:'+name)
    
     
    组合.png

    小结
    在Python交互式模式下,可以直接输入代码,然后执行,并立刻得到结果。

    在命令行模式下,可以直接运行.py文件。

    4.python基础

    语法

    python的语法采取缩进语句块,不需要C、java的大括号区分
    同一缩进的代码被认为是一个语句块,一般我们约定俗成使用4个空格为一个缩进符,所以我建议大家将TAB设置为4个空格,而不是缩进符
    也不需要分号结尾

     
    缩进.png
    #`#`号后内容是注释
    

    数据类型

    python中所有数据类型都是对象,python创建一个数据类型不需要定义和提前声明,当一个变量赋值后就创建了它。
    常用的数据类型

    整数

    python可以处理任意大小的整数,和matlab有异曲同工之妙,数据类型并没有固定的类型长度。
    整数在程序中的写法和数学写法一样
    10,-100,214700000000000000等等

    浮点数

    也就是小数,1.23,3.14等等,浮点数的精度可以规定

    字符串

    字符串是用单引号' '和双引号" "括起来的任意文本,事实上是字符的序列``list,稍后我们会讲到
    既然字符串是序列,那么它当然支持各元素位置的操作。

    s='abcd'
    len(s)=4
    s[0]='a'
    s[3]='d'
    

    可以使用序列的偏移量表示序列中的元素的索引。
    序列中第一个元素索引为0,以此类推。
    序列也能够反向索引从,最后一个开始s[-1],相当于s[len(s)-1],即倒数第几个。

    s='abcd'
    s[-1]='d'
    s[-2]='c'
    

    序列中,我们可以在方括号中使用任何表达式
    除了索引,序列还支持分片(slice)

    s='abcd'
    s[1:3]='bc'
    

    分片中,默认左边界是0,默认右边界是序列长度。

    s[:3]='abc'
    s[1:]='bcd'
    s[:]='abcd'
    作为一个序列,字符串也支持拼接
    s+'zxyz='abcdxyz'
    
    不可变性

    字符串的某个字符不能够被改变,但是可以新建字符串

    s='abcd'
    s[1]='x'是错误的
    可以新建
    n=s[1]+'x'
    python中,数字、字符串、元组都是不可变的。列表、和字典可变。
    
    字符串类型特定方法

    find()find方法是字符串特有的字串查找方法

    s='china'
    s.find('in')=3
    将会返回找到的偏移地址。
    

    replace()是替换字符串内字符的方法。

    s.replace('in','out')='chouta'
    s='china'//s并没有改变。
    

    split()是分离方法

    s='aaa,bbb,ccc'
    s.split(',')=['aaa','bbb','ccc']
    

    将字符串序列分为了有三个字符串的列表。
    还有一些方法,使用dir(数据类型)查看对象的所有属性和方法,使用help(方法)查看某方法功能。帮助内容与官方文档一致,最好查询方法就是使用的时候查看.

    name='china'
    dir(name)
    help(name.split)
    
     
    help.png

    str(数字)可以将数字转换为字符串,int(string)可以将字符串转换为数字等等

    列表 list

    列表是序列的一种,支持所有字符串的操作,唯一的区别返回的结果仍然是列表。
    列表用方括号[]定义

    s=['abc',123,3.14]
    len(s)=3
    我们仍然可以对列表进行索引、切片等:
    s[1]=123
    s[:-1]=['abc',123]
    s+[4,5,6]=['abc',123,3.14,4,5,6]
    s=['abc',123,3.14]s仍然没有被改变
    
    列表特定方法

    列表没有固定大小,可以根据需要增加和减小
    append() 在列表末尾增加对象
    pop()丢弃列表内容。
    sort()列表排序,默认升序。
    reverse()列表反转

    s=[123,456,789]
    s.append(666)
    s=[123,456,789,666]
    s.pop(2)
    s=[123,456,666]
    s.reverse()
    s=[666,456,123]
    s.sort()
    s=[123,456,666]
    

    列表支持嵌套,元素也可以是另一个列表
    m=[[1,2,3],[4,5,6],[7,8,9]]是一个3x3矩阵

    m[1]=[4,5,6]
    
    列表解析

    除了列表的方法,列表还提供了一个高级操作列表解析
    使用列表解析可以简单的操作矩阵

    col=[row[1] for row in m]
    =[2,5,8]
    实际运用可能更复杂
    col=[row[1]+1 for row in m if row[1]%2==0]
    =[3,9]
    

    列表解析编写在方括号中
    可以使用迭代器

    G=(sum(row) for row in m)
    next(G)=6
    next(G)=15
    

    内置函数map(),也会对各项对应位置进行运算

    map(sum,m)
    =[6,15,24]
    map(min,m)
    =[1,4,7]
    

    事实上。列表、集合、字典都可以使用解析。

    元组 tuple

    元组也是序列,但它具有不可变性,一旦初始化就不能修改,语法上它被编写在圆括号中,支持任意类型、任意嵌套和常见的序列操作。

    s=(1,2,3,4)
    len(t)
    =4
    

    元组有特别方法

    s.index(4)
    =3
    

    即4 出现在偏移量3,4 appears at offset 3

    s.count(4)
    =1
    

    4只出现一次
    元组存在的意义是完整性检查,比如传输数据时保证程序其他部分不会改变数据。

    字典 dict

    用{}花括号括起来,一个key对应一个value

    索引和序列相似,不过不是数字而是key值
    D['name']='zhangsan'
    

    事实上我们是在用key哈希映射键搜索值
    重访嵌套

    D={'name': 'zhangsan','age': '20','job': ['dev','manager']}
    D[job]
    = ['dev','manager']
    D[job][-1]
    ='manger'
    

    键排序

    D={b:'name',c:'job',a:'age',d:'gender;}
    我们一般取key并新建列表
    ks=list(D.keys())
    ks.sort()
    for key in keys:
      print(key,'=>',D[key])
    

    也可以使用内置函数sorted()

    for key in sorted(D)
      print(key,'=>'D[key]
    

    集合 set

    与字典类似,只有键key,但没有值 value并且不重复

    循环

    for循环自带迭代器,可以步进循环列表、字符串、对象等

    for i in range(2,100,2):
      x=sum(i)
    print(sum)
    如果是字符串s='abcd'
    for i in s:
      print(i)
    列表l=['name',2,3,4]
    for i in l:
      print(i)
    画一个杨辉三角
    for i in range(1,10):
      print('*'*i+"
    ")
    
     
    yangtangle.png


    while循环

    x=4
    while (x>4):
      x--
      print(x)
    

    判断分支

    if-else语句

    a=100,b=10
    if a<b:
      print(a)
    elif a==b:
      print(a,b)
    else :
      print(b)
    

    break提前退出当前循环
    continue跳过本次循环

    函数

    python中的函数非常简单

    def Fun_Name (para1,para2)
      if xxx
        return xxx
      else
        xxx
        return xxx
    

    返回可以时任何对象,因为python中所有东西都是对象,可以直接赋值给某对象。

    x=Fun_name(para1,para2)
    然后使用x
    

    空函数不做任何事情
    def name()
    pass
    语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
    返回多个值当然是可以的,比如游戏里要返回一个三维坐标

    import math
    def move(x,y,z,step,angle)
      nx=x+step*math.cos(angle)
      ny=y+step*math.sin(angle)
      nz=z+step*math.tan(angle)
      return nx,ny,nz
    

    其中import math表示导入math包,使用封装好的函数
    得到坐标我们就可以赋值了

    x,y,z=move(100,100,0,60,math.pi/3)
    print(x,y,z)
    

    其实完全可以使用一个对象接收

    role=move(100,100,0,60,math.pi/3)
    print(role)
    

    效果和上面一样
    关于参数,正确传参非常重要,pyrhon函数参数有默认参数可变参数关键字参数
    默认参数
    定义时

    def funame (x,y=2)
    使用时可以,仅使用一个参数x,参数y将默认为2
    funame(x)
    如果使用funame(x,y)参数值将为传入值
    

    默认参数降低了使用函数的难度,默认参数必须指向不变对象
    可变参数传入参数的个数时可变的,我们首先想到将参数作为一个list传入 如:

    def cal(numbers)
      x=0
      for n in numbers
        x+=sum(n)
      return (x)
    

    但是要在使用前组装一个list或tulple
    我们可以使用可变参数

    def cal(*numbers)
      x=0
      for n in numbers
        x+=sum(n)
      return (x)
    

    如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:

    nums = [1, 2, 3]
    calc(nums[0], nums[1], nums[2])
    =6
    

    这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

     nums = [1, 2, 3]
     calc(*nums)
    =6
    

    关键字参数可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:

    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数
    person('Michael', 30)
    =name: Michael age: 30 other: {}
    也可以传入任意个数的关键字参数:
    person('Bob', 35, city='Beijing')
    =name: Bob age: 35 other: {'city': 'Beijing'}
    person('Adam', 45, gender='M', job='Engineer')
    =name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    

    关键字参数有什么用?它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

    5.python进阶

    模块,我们之前导入过math模块(库)(包)

    import math
    

    import xxx后python将会找到包所在地址,并且编译,开销很大,但之后就可以直接使用它的函数,xxx.function()
    例如引入

    import random
    ramdom.choice([1,2,3])
    或者起别名
    import random as ran
    ran.choice([1,2,3])
    

    另一种导入包的方式是 from 从某个模块中导入某个具体对象的复制

    from xxx import function()
    from random import choice()
    choice([1,2,3])
    

    就可以
    math时python提供的模块(库)(包,我们可以使用自己写的模块,也可以使用第三方模块
    在Python中,安装第三方模块,是通过包管理工具pip完成的。
    一般安装某个模块
    直接使用pip install packagename
    且慢,我们还有更好的办法
    我们推荐使用的Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,我们装上Anaconda,就相当于把数十个第三方模块自动安装好了,非常简单易用。
    直接在要装某模块的环境下

    conda install packagename
  • 相关阅读:
    JVM内存模型
    生产者与消费者的Java实现
    kafka常用命令
    java中join用法
    elasticsearch关于索引切分的实现
    三十六进制加法
    leetCode之Median of Two Sorted Arrays
    腾讯云“动态加速”与“CDN”的区别——浅谈对“动态加速”的理解(可能有误)
    洗澡或游泳等导致的耳朵进水的解决方案
    windows服务器间文件同步搭建步骤搜集
  • 原文地址:https://www.cnblogs.com/fqnb001/p/12365419.html
Copyright © 2020-2023  润新知