• python语法


    python语法


    python语法优缺点

    1、优点

    简单

    易学

    免费、开源

    可移植性

    可扩展性

    2、缺点

    运行速度

    国内市场较小

    中文资料匮乏

    构架选择太多

    3、使用场景

    web应用开发

    操作系统管理、服务器运维的自动化脚本

    科学计算

    桌面应用程序

    服务器软件(爬虫等)

    游戏(逻辑、服务器)

    构思实现,产品早期原型

    编辑方法

    一、python第一种编辑方法

    1、打开终端,输入 python,进入python环境,输入exit(),退出python     (默认进入python 2交互程序)

    2、输入python3,进入python 3交互程序

    二、python第二种编辑方式

    1、先通过命令行查找python2或python3的地址,记下来   

     

    2、通过vi编辑器编写程序,并在首行加上指定的解释器,即 (Windows系统会忽略这个注释)

     

    3、查看新建文件是否有可执行权限,若没有,就添加

    ls -l

    chmod  u+x  test.py

     

    4、以上设置完成后,输入 ./test.py 即可执行程序

     

    三、python第三种编辑方式

    1、在试用本地文本编辑器编写程序并保存

    2、在终端直接通过python 文件名    执行

    注:推荐使用 python 文件名  执行程序

    注释

    1、单行注释  (支持嵌套注释,即单行多个#注释)

     

    2、多行注释   (不支持嵌套注释,会报错)

     

    3、让脚本支持中文

    程序上面加上编码方式(若在包含的中文的程序中不添加编码方式,执行会报错

    变量

    1、type(a)   回车可输出a的类型

     

    2、标识符规则

    • 标识符由字母、下划线和数字组成,且数字不能开头
    • 标识符是区分大小写的

    输出

    1、普通输出

    print("hello world")   输出结果为 hello world

    2、格式化输出

    print("my english score is %d"%score)  其中score=100

    输出结果为 my english score is 100

    print("English score is %d,math score is %d"%(score,mathScore))   其中score=100,mathScore=95

    输出结果为 English score is 100,math score is 95

    注:int类型用 %d,小数浮点类型用%f,字符串类型用%s

     

    3、换行输出 (转义符 ,可同时添加多个)

     

    输入

    input("请输入密码:")   获取用户键盘输入内容

    a = input("请输入密码:")   将用户输入的密码保存到变量a中

    print("您的密码是%s"%a)    格式化输出

     raw_input("提示:")   仅用于python2中

    python2的input与raw_input区别

       

    input会计算输入的表达式再输出,而raw_input是直接输出用户输入的内容

    注:python3中的input等同于python2中的raw_input

    延时打印

    import  time

    time.sleep(时间)    括号内数字为多少则延时几秒再打印

        

    运算符

       

    a+=b-c*2   等价于  a=a+b-c*2

    a*=b-c*2    等价于  a=a*(b-c*2)

    取整和取余的应用

     

    取整可以判断该数字在哪一列   7//3    2       除的数字为列数3

    取余可以判定该数字在哪一行   7%3   1       除的数字为列数3

    以上计算可得数字7在第1行第2列

    常用数据类型转换

    input()  得到的结果为str类型

    a = int(password)    强制类型转换,str转换为int并赋值给a

    b = float("3.14")     

    list  列表list是一种有序的集合,可以随时添加和删除其中的元素) 

     

    len(classmates)   输出结果为  3 。  即len()函数可以获得list元素的个数

    用索引访问每个位置的元素,索引送0开始,即 classmates[0]开始

    注:

    • -1可直接索引到最后一个元素,例: classmates[-1]等同于classmates[2]。
    • list里面的元素类型可以不同    例:L = ['Apple', 123, True]
    • list元素也可以使另一个list  例:s = ['python', 'java', ['asp', 'php'], 'scheme']

    常用方法:

      ① append() 方法可以往list中追加元素到末尾

     

      ② insert() 方法把元素插入到指定位置,例如索引号为1的位置

     

      ③ pop()  方法删除list中元素
    • 参数为空时默认删除list末尾的元素                      

     

    • 参数为 i  时(i 是索引位置),删除指定位置元素   pop(i)

      

        ④ 替换某个元素,直接复制给对应索引位置

     

    tuple 元组,有序列表,和list非常类似,但是tuple一旦初始化就不能修改。

     

    只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

     

    if 判断语句

    格式:   

     

      条件满足时,要做的事

       

    循环

    ① for...in循环,依次把list或tuple中的每个元素迭代出来

     

    •   for x  in ...    计算1-10的整数之和

          

    • range() 函数可以生成一个整数序列,再通过list()函数可以转换为list

               

    ② while 循环,只要条件满足,就不断循环,条件不满足时退出循环

        例如计算100以内所有奇数之和

       

        在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出。

    • break 语句,提前结束循环

       

    • continue语句,跳过当前的这次循环,直接开始下一次循环

       

         breakcontiune这两个语句通常都必须配合 if 语句使用

    dict和set

    dict

    Python内置字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

     

    dict赋值:   ① 初始化时指定  ② 直接通过key放入,多次对一个key赋值,后面的值会覆盖前面的。

     

    注: 若key不存在,dict会报错,可通过 in 判断key是否存在:

     

     或者get() 方法判断,若不存在返回 None或自己指定的value(注:返回None的时候Python的交互环境不显示结果。

     

    删除一个key,pop(key)

     

    set

    set和dict类似,也是一组key的集合,但不存储value。

    要创建一个set,需要提供一个list作为输入集合:

     

    注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。

    重复元素在set中自动被过滤。

    添加元素到set,使用add(key) 方法,可以重复添加,但不会重复显示:

     

    删除元素,使用remove(key) 方法

     

    两个set可以做数学意义上的交集、并集等操作。

    函数

    1、定义函数:

    def  函数名(参数): 
       函数内容
        return 返回结果

    2、调用函数      print(my_abs(-99))

    注意:如果没有return语句,函数执行完毕后也会返回结果,只是结果为Nonereturn None可以简写为return

    在Python交互环境中定义函数时,注意Python会出现...的提示。函数定义结束后需要按两次回车重新回到>>>提示符下:

     

    如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名):

     

    pass语句,用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

    扩展知识:

    数据类型检查可以用内置函数isinstance()实现:

    例如对以上 my_abs() 函数的参数做检查,只允许整数和浮点数类型参数:

    注:函数可以同时返回多个值,但其实就是一个tuple。

    3、函数参数

    • 默认参数

    默认参数可以简化函数的调用。设置默认参数时,有几点要注意:

    一是必选参数在前,默认参数在后,否则Python的解释器会报错

    二是如何设置默认参数。

    当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

    例:   写个一年级小学生注册的函数,需要传入namegender两个参数:

    这样,调用enroll()函数只需要传入两个参数:
    
    

    如果要继续传入年龄、城市等信息怎么办?这样会使得调用函数的复杂度大大增加。

    我们可以把年龄和城市设为默认参数:

    这样,大多数学生注册时不需要提供年龄和城市,只提供必须的两个参数:

    只有与默认参数不符的学生才需要提供额外的信息:

    有多个默认参数时,调用的时候,既可以按顺序提供默认参数,比如调用enroll('Bob', 'M', 7),意思是,除了namegender这两个参数外,最后1个参数应用在参数age上,city参数由于没有提供,仍然使用默认值。

    也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll('Adam', 'M', city='Tianjin'),意思是,city参数用传进去的值,其他默认参数继续使用默认值。

    注意:定义默认参数要牢记一点:默认参数必须指向不变对象!

    • 可变参数

    可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

    格式:   *参数        *args是可变参数,args接收的是一个tuple;

    可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))

    例:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。

    定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:

    如果已经有一个list或者tuple,要调用一个可变参数怎么办?在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

    • 关键字参数

    关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

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

    格式: **参数      **kw是关键字参数,kw接收的是一个dict。

    关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

    函数person除了必选参数nameage外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数:

    也可以传入任意个数的关键字参数:

    和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:

    **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra

    • 命名关键字参数

    如果要限制关键字参数的名字,就可以用命名关键字参数。

    person()函数为例,我们希望检查是否有cityjob参数:

    例如,只接收cityjob作为关键字参数。这种方式定义的函数如下:

    和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。

    调用方式如下:

    如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

    注意:命名关键字参数必须传入参数名,否则会报错。

    • 参数组合

    参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    调用输出

    所以,对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

    注意:虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。

    递归函数

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

    例,计算阶乘 n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出:

    fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n

    所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。

    注:使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

    解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

    尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。

    要改成尾递归方式,需要多一点代码,主要是要把每一步的乘积传入到递归函数中:

    fact(5)对应的fact_iter(5, 1)的调用如下:

    高级特性

    1、切片

    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引012,正好是3个元素。

  • 相关阅读:
    C# 排序
    第一个 Windows 应用程序
    WINDEF.h 变量类型
    几种流行的JS框架的选择
    SqlHelper 数据库操作类
    希望找人一起写个 Ajax 的封装
    C# 字符串处理一些方法
    SqlHelper 数据库操作类2
    JavaScript 字符串函数扩充
    JavaScript 字符串处理函数
  • 原文地址:https://www.cnblogs.com/xinxinyo/p/10394837.html
Copyright © 2020-2023  润新知