Python基础(七)

1 模块函数

1.1 模块函数

模块函数指的是模块中的函数,模块函数有三种:

  • 内置模块:又叫标准库.
  • 第三方开源模块:可以通过包管理工具进行安装.
  • 自定义模块.

1.2 导入

导入方法主要有三种:

1.2.1 import moudle

1import math 2math.e

在这里插入图片描述

1.2.2 import module as alias

alias表示别名.

在这里插入图片描述

1.2.3 from module import function

从模块导入函数.

在这里插入图片描述

1.2.4 from module import function as alias

与上一种类似,加上了别名.

在这里插入图片描述

2 自定义函数

2.1 定义函数

使用关键字def定义:

1def func(): 2 print(1)

2.2 设置docstring

docstring就是注释,描述了函数的功能,使用三个单引号或三个双引号,可以用help()获取函数的docstring.

1def func(): 2 ''' 3 func docstring 4 ''' 5 print(1) 6help(func)

在这里插入图片描述

2.3 函数调用

直接使用函数名即可,需要的话要加上参数.

1func() 2func(22)

2.4 返回值

返回值在return里指定,可以返回多个值:

1def f(): 2 return 1,2,3,4

相当于返回一个元组.若函数没有return,则返回None.

2.5 形参

2.5.1 形参分类

形参就是函数定义时的参数列表里面的参数,可以分为:

  • 可选形参:给出默认值的形参.

  • 必选形参:没有给出默认的形参.

    def f(x1,x2,x3=3)

其中x1,x2必选形参,x3可选形参.

2.5.2 * 与 **

带一个 * 的形参表示该形参类型为元组,带两个 * 的形参表示该参数类型为字典.

2.5.3 命名关键字参数

出现在*后的参数.

def f(x1,*x2,x3,x4)

x3与x4就是命名关键字参数,在调用时必须显式使用参数名.

2.6 实参

python实参可以分为位置实参与关键字实参.

2.6.1 位置参数

位置参数就是没有指定形参名字的实参,每个实参基于顺序关联到一个形参.

2.6.2 关键字参数

关键字参数就是指定了形参名字的实参,用键值对的形式指定,可以不按顺序调用.

1def f(x1,x2,x3): 2 print(x1,x2,x3) 3f(1,2,3) 4f(x3=999,x1=888,x2=999999)

在这里插入图片描述

2.7 变量可见性

python变量的可见性有三种:全局变量,局部变量,非局部变量.

2.7.1 局部变量

在函数内的变量为局部变量,因此,以下代码会输出9:

1x1 = 8 2def f(): 3 x1 = 9 4 print(x1) 5f()

如果在x1之前输出呢?

在这里插入图片描述

直接提示没有定义x1,就是全局变量x1在函数内不可见,但笔者不死心,一定要运行一下.

在这里插入图片描述

它说局部变量x1没有被赋值,注意,是局部变量,因此,这也证明了全局变量在函数内不可见.

2.7.2 全局变量

若要使全局变量在函数内可见,使用global:

1x1 = 8 2def f(): 3 global x1 4 print(x1) 5 x1 = 9 6 print(x1) 7f()

在这里插入图片描述

global x1表示x1是一个全局变量,注意global x1需要单独占一行.

2.7.3 非局部变量

用于嵌套函数中,使用nonlocal声明,表示内层函数的这个变量是外层函数的.

1x1 = 8 2def f(): 3 x1 = 9 4 print(x1) 5 def f1(): 6 nonlocal x1 7 print(x1) 8 x1 = 10 9 print(x1) 10 return f1 11f() 12f()()

在这里插入图片描述

第一个与第二个9都是f()中的print()输出的,第三个9是f1()中的print()输出的.

2.8 参数传递规则

当实参传递给形参时,有两种传递规则,一是值传递,而是地址传递.

2.8.1 值传递

当实参为不可变对象时,采用值传递规则,常见的不可变对象类型包括int,float,str,bool,tuple.

1def f(x): 2 x = 1 3 print(x) 4x = 3 5print('-------int------') 6f(x) 7print(x) 8print() 9 10x = 'string' 11print('-------str------') 12f(x) 13print(x) 14print() 15 16x = (3,4,5) 17print('-------tuple------') 18f(x) 19print(x) 20print() 21 22x = 5.799 23print('-------float------') 24f(x) 25print(x) 26print()

在这里插入图片描述

2.8.2 地址传递

参数为可变对象时,采用地址传递规则,修改形参的值会同时改变实参的值.常见的可变对象类型包括list,set,dict.

1def f(x): 2 if type(x) == list: 3 x = x.reverse() 4 elif isinstance(x,set): 5 x.add(8) 6 else: 7 x['0'] = 3 8x = [1,2,3] 9print('-------list------') 10print(x) 11f(x) 12print(x) 13print() 14 15x = {4,5,6} 16print('-------set------') 17print(x) 18f(x) 19print(x) 20print() 21 22x = {'a':1,'b':2} 23print('-------dict------') 24print(x) 25f(x) 26print(x) 27print()

在这里插入图片描述

2.9 lambda函数

lambda是一种特殊的自定义函数,使用关键字lambda进行定义,是一种匿名函数,函数体一般很短.

2.9.1 定义

以关键字lambda开头,后面是参数列表,参数列表结束后加一个冒号,后面是返回值.

1y = lambda x:x*3 2z = lambda x,y:x*y

2.9.2 调用

调用可以通过"函数名"调用,或者配合其他函数使用.

在这里插入图片描述

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python基础4——模块与包

12模块与包模块通俗地理解为.py文件,里面定义了变量、函数和类。需要的时候就可以导入这些模块。执行步骤1.在python模块加载路径中查找相应的模块文件2.将模块文件编译成中间代码3.执行模块文件中的代码12.1模块分类1.内置模块,也叫标准库,比如说random,time,大概有200多个2.第三方模块,也称为第三方库,使用pipins

Python之time模块的时间戳、时间字符串格式化与转换

Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y