Python(3)

函数的分类

  • 函数分为两种类型: 一种设计成返回值,一种仅执行代码而不返回
  • 函数用来将复杂的问题分解为更小的问题,进而消除重复性代码,通过分解为不同的逻辑单元使其更容易阅读

内建函数

python中自带的函数,返回值由python规定

用户自定义函数

自定义返回值的函数

def 函数名(参数1,参数2,...):
    语句块
    return 返回值

注:一旦return语句得到执行,函数立即终止。return语句可以出现在函数体中的任何位置。
python有一个称为None的对象用来表示空值,此对象没有任何方法。

传递参数的形式

按照位置传递参数:调用语句中的实际参数与函数头中的形式参数一一对应,实参的数目必须与形参相同,实参的数据类型必须与形参相同
按照默认值传递参数

一个函数的某些(或者全部)参数可以有默认值——当没有值传递给它们时而赋给的值。

def total(w,x,y=10,z=20):
    return((w**x)+y+z)
total(2,3)  //2^3+10+20 38
total(2,3,4)  //2^3+4+20 32
total(2,3,4,5)  //2^3+4+5  //17

注:在函数定义中,没有默认值的参数必须放在有默认值的参数前面,如def func(x,y=2,z)
是不合法的

按照关键字传递参数

实际参数可以通过使用相应形式参数的名字传递给函数,而不是根据位置

def total(w,x,y=10,z=20):
    return((w**x)+y+z)
total(y=4,x=3,w=2)  //2^3+4+20 32
total(2,y=4,x=3) //2^3+4+20 32
total(2,3,y=4) //2^3+4+20 32
total(w=2,3,y=4) //error ,不合法,按位置传递的实参必须要放在按关键字传递的实参前(形参类似)

注:当实际参数是一个表达式时,先要计算表达式,然后将它的值传给形式参数

向函数传值

如果函数调用的实际参数是一个变量,那么由实际参数变量指向的对象(而不是实际参数变量本身)传递给了形式参数变量。因此,如果对象是不可变的且函数改变了形式参数变量的值,实际参数所指向的对象不会发生任何改变,当实际参数变量指向数值、字符串或元组对象时,不管怎样通过函数调用改变实际参数的值,都是不可能的。

main()函数

主函数(main函数)既没有参数,也没有返回值,是程序的入口函数

def main():
    函数体
main()

注:python中需要调用主函数,之后初始化要执行的任务(一般将第一个函数命名为main,它的前面有import语句和全局变量,所有的程序将以main()语句结尾,从而调用main()函数)

变量作用域

  • 在函数内部创建的变量只能被同一函数内部的语句访问,并且当函数退出后变量就不存在了。(每次函数被调用时变量再重新创建),这样的变量对于函数来说是局部的,有局部作用域。对于函数的参数同样成立。
  • 如果在两个不同的函数创建了同样名称的变量,那么它们之间没有任何关系,可以当作完全不同的变量,对于函数的参数同样成立。
    def main():
      x=2
      print(str(x)+": function main")
      trivial()
      print(str(x)+": function main")
    def trivial():
      x=3
      print(str(x)+": function trivial")
    main()
    #输出结果
    2 : function main
    3 : function trivial
    2 : function main  

局部变量

def main():
    x=5
    trivial()
def trivial():
    print(x)
main()
# 结果会产生一个NameError的回溯错误,因为主函数创建的x无法被trivial()识别

全局变量

  • 定义:一个变量可以被程序中任何部分识别,这样的变量叫做全局变量
  • 创建方式:将创建它的赋值语句放在程序顶部
  • 任何函数都能读取全局变量的值,然而它的值不能在函数内部进行修改,除非修改语句之前有以下的语句形式
    global 全局变量名

注:global仅影响所在函数体内其后的语句,它不允许在其他函数内部修改全局变量的值。

x=0  #定义一个全局变量
def main():
    print(str(x))
    trivial()
    print(str(x))
def trivial():
    global x
    x += 7
    print(str(x))
#输出结果
0
7
7

命名常量

命名常量的名字使用大写字母的单词,并且单词间使用下划线分隔,并赋给一个常量。

INTEREST_TATE = 0.04
BOOK_TITLE = "python"

注:python中允许给任何变量重新赋值,程序员要负责地不改变这个变量的值

库模块

  • python通过称为库模块的文件支持函数的重用
  • 库模块是一个扩展名为.py的文件,包含了可以被其他任何程序使用(我们可以称为imported)的函数和变量
  • 库模块可以使用IDLE和任何文本编辑器进行创建
    #不使用库模块
    def add(x,y):
      flag = x+y
      return flag
    amount = add(7,8)
    print(str(amount))
    #使用库模块
    #方式一
    import sum  #sum.py文件为add函数的声明与定义
    amount = sum.add(7,8)   #使用sum.add()代替上述add()
    print(str(amount))
    #使用库模块
    #方法二
    from sum import *  //表示调用sum.py文件的所有函数
    amount = add(7,8)
    print(str(amount))

python标准库模块

  • os 删除和重命名文件
  • os.path 确定指定的文件是否存在,是os的子模块
  • pickle 在文件中存储对象(如字典、列表和集合),并能从文件中取回对象
  • random 随机选择数字和子集
  • tkinter 支持程序拥有一个图形用户界面
  • turtle 支持图形化turtle
  • math 包含了三角函数、指数函数和对数函数

函数

调用其他函数的函数

一个函数可以调用另一个函数,当被调用的函数结束时(return语句之后或被调用函数的最后一个语句执行完毕之后),控制流程返回到调用函数中调用发生之后的位置

def main():
    firstPart()
    print(str(4)+": from function main")
def firstPart():
    print(str(1)+": from function firstPart")
    secondPart()
    print(str(3)+": from function firstPart")
def secondPart():
    print(str(2)+": from function secondPart")
#输出结果
1: from function firstPart
2: from function secondPart
3: from function firstPart
4: from function main

列表解析

当我们想要对列表中的每个元素执行一个特定函数时,一个for循环可以完成。但是,更加简单的方法是使用列表解析。

list2 = [f(x) for x in list1]  #将list1的每个元素的f(item)放入列表list2中,f不是一个内建函数就是用户自定义函数
def g(x):
    return (int(x)**2)
list1 = ['2','5','6','7']
list2 = [g(x) for x in list1]   #list2=[4,25,36,49]

过滤列表

在列表解析时加入if语句对列表进行筛选

list2 = [g(x) for x in list1 if int(x)%2==1]    #list2=[25,49],只有奇数的平方才会出现在列表里

注:列表解析可以用在字符串、元组和range函数产生的算术表达式


   转载规则


《Python(3)》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录