Python函数

函数:

  函数是组合好的,可以重复使用的,用来实现单一或相连功能的代码段

 

作用:

  能提高应用的模块性和代码的重复利用率

函数的创建:

  定义函数的规则

  1、函数代码块 以def关键字开头,后接函数标识符和圆括号()

  2、所有传入的参数和自变量必须在圆括号中,可以在圆括号中定义参数

  3函数的第一行可以选择性使用文档字符串,用于存放函数说明

  4、return[表达式]结束函数,选择性选择一个值给调用方,不带表达式的return相当于返回None

 

  语法:

    def 函数名 (参数列表)

      函数体

函数的调用

函数的参数

参数分类:位置传参、序列传参、关键字参数、默认参数、字典关键字传参、综合传参

形参:(形式参数)

  在用def关键字定义函数时函数名后面括号里的变量称为实际参数

 

1、位置传参

  定义:

  实际参数(实参)的对应关系与形式参数的对应关系是按位置来依次进行

  示例:   

    def Student(name ,age ,sex)

      print(name)

      print(age)

      。。。。。

  传参时,位置一一对应      

2、序列传参

 

3、默认传参

  调用函数时,如果没有传递参数,就会使用默认参数

  使用默认参数,急救室在定义模块时,给参数一个默认值。如果没有给调用的的函数的参数赋值,调用的函数就会使用默认参数

    注意,默认参数在定义函数时的口号内。

4、关键字参数

  

5、字典关键字传参

  定义:

    是指实参为字典,将字典用**拆解后再进行关键字传参的传参方式

  说明:

    字典的键名和形参名必须一致

    字典键名为字符串

    def student(name,age,score)

      .........

    d={字典}

    student(**d)

6、函数的综合传参

  定义:

    函数的传参方式在能确定形参能唯一匹配到相应实参的情况下可以任意组合

  说明:

    位置传参(序列传参)要在关键字传参(字典关键字传参)的左侧

    

def myfun1(a,b,c)
    print(a,b,c)
myfun1(100,*[200,300])  
myfun1(*(100,200),300)
myfun1(*[100],200,*(300,))
myfun1(100,c=300,b=200)
myfun1(100,**{'c':300,'b':200})
  

 7、函数分类

  ①、有参函数和无参函数

        函数可变的内容使用有参函数,不可变的无参函数使用无参函数 

  ②、有返回值的函数,和没有返回值的函数

    return

练习:写一个函数mixmax(a,b,c)有三个参数,返回着三个参数中的最小值和最大值,

  要求,形成元组,最小值再前,最大值在后

def minmax(a,b,c):
    list1=[a,b,c]         #放入列表
    list1.sort()          #sort功能升序排列
    print('排序后列表:',list1) 
    print('最小值',list1[0])
    print('最大值',list1[2])
    tuple1 = tuple(list1)       #转化类型
    print('形成元组',tuple1)
    return None
minmax(43,22,54)
        

8、函数的形参的定义方式:

  ①星号元组形参

    语法:

      def 函数名(*元组形参名)

         语句块

    作用:收集多余的参数  

  ②命名关键字形参

    语法:

      def 函数名(*,命名关键字形参)

        语句块

    或

      def 函数名(*args,命名关键字形参)

    作用:

        强制说要的参数必须使用关键字传参或者字典关键字传参

def fa(*, a, b):
    print('a', a)
    print('b', b)


def fb(*args, a, b):
    print('args', args)
    print('a', a)
    print('b', b)


fb(b = 1, a =2 )
fa(**{'b': 200, 'a': 100})
fb(1, 2, 3, 4, b=200, a=100)

  

args ()
a 2
b 1
a 100
b 200
args (1, 2, 3, 4)
a 100
b 200

   ③双星号字典形参

    语法:

      def 函数名(**字典形参名)

        语句块

    作用:

      收集多余的关键字参数

    说明:

      字典形参通常命名为‘kwargs’

函数的参数说明:

    位置形参,默认参数,星号元组形参,双星号字典形参可以混合使用,函数形参自左到有的形式为:

      位置形参  星号元组形参 命名关键字形参 双星号字典形参

 9、函数的不定长参数:

  星号元组形参,双星号元组形参‘

    说明:可以接受任意位置传参和关键字传参

     练习:写一个函数,mymax类似与内置函数max

  详见

    >>>help(max)

    仿照max函数写一个mymax含少数,功能与max相同

    

>>> help(max)
Help on built-in function max in module builtins:

max(...)
    max(iterable, *[, default=obj, key=func]) -> value
    max(arg1, arg2, *args, *[, key=func]) -> value

    With a single iterable argument, return its biggest item. The
    default keyword-only argument specifies an object to return if
    the provided iterable is empty.
    With two or more arguments, return the largest argument.

>>>

  

def mymax(a,*args):
    if len(args) == 0:#实参个数为一
        zuida = a[0]
        for x in a:
            if x > zuida:
                zuida = x
        return zuida
    else:
        zuida = a
        for x in args:
            if x >zuida:
                zuida = x
        return zuida
print(mymax([6,3,4,8]))
print(mymax(100,433,122))

10、变量作用域

  作用域:变量的命名空间

  局部变量,全局变量:

  ①、局部变量

    定义:

      定义在函数内部的变量称为局部变量(函数的形参也是局部变量)

      局部变量只能在函数内部使用

      局部变量在函数调用时才能创建,在函数调用后自动销毁

  ②、全局变量

    定义:定义在函数外

  

 

 

10、匿名函数 lambda

  

    

11、函数变量

        函数名是变量,它在def语句创建是绑定一个函数

    一个函数可以作为另外一个函数的实参进行传递

    函数还可以作为另一个函数的返回值

 

12、函数传递

 

13、函数返回值

 

14、Python的作用域

     Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

  变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

  • L (Local) 局部作用域,函数内
  • E (Enclosing) 闭包函数外的函数中,外部嵌套函数作用域
  • G (Global) 全局作用域,文件作用域
  • B (Built-in) 内置作用域(内置函数所在模块的范围),内建模型作用域

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

  

15:globals()函数 / local()函数:

  global()函数:

    作用:告诉解释执行器global语句声明一个或多个变量,这些变量的作用域为模块级的作用域,也称全局变量

       全局声明global将赋值语句的变量映射到模块文件内部的作用域

    语法:

      global 变量1,变量2,.....

      返回当前全局作用域内变量的字典

    说明:全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为创建局部变量)

       全局变量在函数内部不经过声明就可以直接刚问,变量已存在并关联一个对象

       不能先声明局部变量,再用global声明为全局变量,此做法,不符合规定

       global变量列表里的变量名不能出现在此作用域的的形参列表里

  local()函数

      返回局部作用域变量的字典 

    

 

posted @ 2019-06-21 11:10  为挽月明  阅读(246)  评论(0)    收藏  举报
hello word


为挽月明© liclap@Foxmail.com