Python学习笔记(函数)

1.函数基础

1.1定义函数

    Python函数语法规则如下:

  • 函数代码以 def 关键词开头,后面接函数标识符名称和小括号()。
  • 任何传入参数和自变量必须放在小括号里,小括号里可以定义参数。
  •  函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明。
  • 函数体以冒号起始,并且缩进。
  • return<返回值>结束函数,选择性地返回一个值给调用方。没有返回值的 return 语句相当于返回 None。       

1.2调用函数

调用函数就是使用、运行函数。在Python程序中,当定义好一个函数后,就相当于给这个函数一个名称,指定了函数里包含的参数和代码块结构

2.函数的参数

2.1形参和实参

形参表示函数完成其工作所需的一项信息,实参则是调用函数时传递给函数的信息

在调用函数时可以使用的实参类型有:必需参数、关键字参数、默认参数和不定长参数。

2.2必需参数

必需参数也被称为位置参数,在使用时必须以正确的顺序传入函数。并且在调用函数时,必需参数的数量需要和声明时的一样

def printme(str):
    print(str)
    return 

printme('ok')

2.3关键字参数

关键字参数和函数调用的关系非常紧密。在函数调用时,通过使用关键字参数确定传入的参数值

def printinfo (name,age):
        print("名字:",name)
        print("年龄:",age)
        return
printinfo(age=20,name='Jim')

2.4默认参数

在Python程序调用函数时,如果没有任何传递的参数,则会使用默认参数(也被称为默认值参数)

def printinfo (name,age=64):
        print("名字:",name)
        print("年龄:",age)
        return
printinfo(age=63,name='Guido van Rossum')
print("--------------------")
printinfo(name='Java之父:高斯林')

*在声明函数时,其参数列表中如果既包括无默认值的参数,又包括有默认值的参数,那么必须先声明无默认值参数,后声明有默认值参数。

2.5不定长参数

不定长参数也被称为可变参数,在声明不定长参数时不会命名,基本语法格式如下:

def functionname([formal_args], *var_args_tuple):
        function_suite
        return [experssion]

在函数调用时没有指定参数,加了星号的变量名就是一个空元组。如果依次序将所有的其他变量都赋值之后,剩下的参数将会收集在一个元组中,元组的名称就是前面带星号的参数名

def avg(first,*rest):
    return (first + sum(rest))/(1+len(rest))
print(avg(1,2))
print(avg(1,2,3,4))

2.6按值传递和按引用传递

在按值传递中,被调函数的形参作为被调函数的局部变量来处理,即在堆栈中开辟内存空间以存放由主调函数读取来的实参的值,从而成了实参的副本。

在按引用传递中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的由主调函数读取来的实参变量的地址。

3.函数的返回值

3.1 返回一个简单的值

3.2可选实参

#定义函数get_name(),其中middle_name是可选实参
def get_name(first_name,last_name,middle_name=''):
    """返回一个简单的值:"""
    full_name =first_name+''+middle_name+''+last_name
    return full_name.title()
jiandan =get_name('世界上','Python','jim最爱')
print(jiandan)

3.3 返回一个字典

使用函数可以返回任意类型的值,包括列表和字典等较复杂的数据结构。

def person(first_name,last_name,age=''):
    """截止到2019年,Python已经诞生了28年了(返回一个字典)"""
    person={'first':first_name,'last':last_name}     #将参数封装在字典person中
    if age:
        person['age']=age                            #设置字典person中的age就是参数age的值
    return person
musician=person('Python','开发语言',age=28)            #调用函数person()
print(musician)

if 判断 age 是否不为零

4. 变量的作用域

  • 局部作用域:定义在函数内部的变量拥有一个局部作用域,表示只能在其被声明的函数内部访问
  • 全局作用域:能作用于函数内外的变量,既可以在各函数的外部使用,也可以在各函数内部使用
  • 内置定义域:Python预先设定的

5.使用函数传递列表

类似数组,不再赘述

6.使用匿名函数 

     可以使用lambda(正则表达式)来创建匿名函数。所谓匿名,是指不再使用关键字 def 的形式定义一个函数。也可以将匿名函数赋给一个变量供调用。

  •     lambda只是一个表达式,函数体比 def 简单得多。
  •     lambda的主体是一个表达式,而不是一个代码块,仅仅只能在lambda表达式中封装有限的逻辑代码进去。
  •     lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
  •     虽然lambda函数看起来只能写一行,却不等同于 C 语言或 C++语言的内联语言,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
sum = lambda arg1 , arg2 : arg1 + arg2 ;
print(sum(40,20))
print(sum(40,30))

    在Python程序中,通常使用lambda定义如下类型的函数。

  • 简单匿名函数:编写快速而简单,节省代码。
  • 不重复使用的函数:在有些时候需要一个抽象简单的功能,又不想单独定义一个函数。
  • 为了代码清晰:使用它代码显得清晰易懂。

      比如在某个函数中需要一个重复使用的表达式,就可以使用lambda来定义一个匿名函数。当发生多次调用时,就可以减少代码的编写量,使条理变得更加清晰。

7.函数和模块开发

7.1 导入整个模块文件

      通过使用 import 语句,可以在当前运行的程序文件中使用模块中的代码。将函数存储在独立的文件中的开发模式,可以隐藏程序代码的细节,可以在众多不同的程序中重复使用这个函数。

如果使用这种 import 语句导入了名为 module_name.py的模块,就可以使用类似 module_name.function_name () 使用其中任何一个函数。

7.2 只导入指定函数

     在Python程序中,还可以根据项目的要求只导入模块文件中的特定函数,这种导入方式的语法格式如下所示:

     

from module_name import function_name

     如果需要从一个文件中导入多个指定的函数,可以使用逗号隔开多个导入函数的名称。具体语法格式如下:

     

from  module_name  import  function_name0  , function_name1,  function_name2

7.3使用as指定函数别名

      如果从外部模块文件中导入的函数名称与现有的名称冲突,或者太长,可以使用 as 指定简短的别名。

from module_name import function_name as xxxxx

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值