Python基础(七)

1 模块函数

1.1 模块函数

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

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

1.2 导入

导入语法主要有三种:

  • import ...
  • import ... as ...
  • from ... import ...
  • from ... import ... as ...

1.2.1 import

直接导入整个模块,import后面直接加上模块名。

import math
math.e

在这里插入图片描述

1.2.2 import as

也是直接导入整个模块,import后面是模块名,as后面是别名,比如import math as m,其中mmath的别名。

在这里插入图片描述

1.2.3 from import

从某个模块导入某个函数,from后面是模块名,import后面是函数名。

在这里插入图片描述

1.2.4 from import as

与上一种类似,从模块导入函数,只是为函数加上了别名。

在这里插入图片描述

2 自定义函数

2.1 定义函数

使用关键字def定义:

def func():
	print(1)

2.2 设置docstring

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

def func():
	'''
	func docstring
	'''
	print(1)
help(func)

在这里插入图片描述

2.3 函数调用

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

func()
func(22)

2.4 返回值

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

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

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

2.5 形参

2.5.1 形参分类

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

  • 可选形参:给出默认值的形参
  • 必选形参:没有给出默认的形参
def f(x1,x2,x3=3)

其中x1x2必选形参,x3可选形参。

2.5.2 ***

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

2.5.3 命名关键字参数

出现在*后的参数。

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

x3x4就是命名关键字参数,在调用时必须显式使用参数名。

2.6 实参

Python实参可以分为位置实参与关键字实参。

2.6.1 位置参数

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

2.6.2 关键字参数

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

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

在这里插入图片描述

2.7 变量可见性

Python变量的可见性有三种:全局变量、局部变量、非局部变量。

2.7.1 局部变量

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

x1 = 8
def f():
    x1 = 9
    print(x1)
f()

如果在x1之前输出呢?

在这里插入图片描述

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

在这里插入图片描述

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

2.7.2 全局变量

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

x1 = 8
def f():
    global x1
    print(x1)
    x1 = 9
    print(x1)
f()

在这里插入图片描述

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

2.7.3 非局部变量

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

x1 = 8
def f():
    x1 = 9
    print(x1)
    def f1():
        nonlocal x1
        print(x1)
        x1 = 10
        print(x1)
    return f1
f()
f()()

在这里插入图片描述

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

2.8 参数传递规则

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

2.8.1 值传递

当实参为不可变对象时,采用值传递规则,常见的不可变对象类型包括intfloatstrbooltuple

def f(x):
    x = 1
    print(x)
x = 3
print('-------int------')
f(x)
print(x)
print()

x = 'string'
print('-------str------')
f(x)
print(x)
print()

x = (3,4,5)
print('-------tuple------')
f(x)
print(x)
print()

x = 5.799
print('-------float------')
f(x)
print(x)
print()

在这里插入图片描述

2.8.2 地址传递

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

def f(x):
    if type(x) == list:
        x = x.reverse()
    elif isinstance(x,set):
        x.add(8)
    else:
        x['0'] = 3
x = [1,2,3]
print('-------list------')
print(x)
f(x)
print(x)
print()

x = {4,5,6}
print('-------set------')
print(x)
f(x)
print(x)
print()

x = {'a':1,'b':2}
print('-------dict------')
print(x)
f(x)
print(x)
print()

在这里插入图片描述

2.9 lambda函数

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

2.9.1 定义

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

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

2.9.2 调用

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

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值