iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >8、Python——python函数(函数分类以及定义与调用、参数注意事项、内建函数、参数分类、变量定义域)
  • 851
分享到

8、Python——python函数(函数分类以及定义与调用、参数注意事项、内建函数、参数分类、变量定义域)

python开发语言后端 2023-09-21 06:09:19 851人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录 1、函数的定义与调用 1.1、什么是函数 1.2、使用函数的好处 1.3、函数的定义 1.3.1、函数的赋值 2、函数参数 2.1、什么是函数参数 2.2、参数的形式 2.3、参数分类 2.3.1、参数的注意事项(⭐⭐⭐) 2.3.2

目录

1、函数的定义与调用

1.1、什么是函数

1.2、使用函数的好处

1.3、函数的定义

1.3.1、函数的赋值

2、函数参数

2.1、什么是函数参数

2.2、参数的形式

2.3、参数分类

2.3.1、参数的注意事项(⭐⭐⭐)

2.3.2、可变长位置参数

2.3.3、可变长关键字参数

2.3.4、参数定义顺序⭐

2.3.5、小练习

2.3.6、解包

3、函数返回值

3.1、函数return的语句

4、匿名函数

4.1、匿名函数及其定义 

4.1.1、map

 4.2、匿名函数——小练习(round的使用)

5、递归函数

5.1、递归函数练习——使用递归实现斐波拉契数列

5.2、递归函数练习——兔子繁衍问题

5.4、 递归函数练习——爬楼梯问题

 6、函数的参数传递

6.1、不可变数据类型

6.2、可变数据类型

6.3、 定义参数的时候,默认参数避免定义成一个可变数据类型⭐⭐⭐

7、变量作用域

7.1、局部变量和全局变量

7.2、内建变量

7.3、变量名的解析原则(查找顺序为:LEGB)

8、文档注释(Document String)

9、内建函数与工厂函数

9.1、函数和方法

9.2、内建

9.3、工厂函数

9.3.1、工厂函数主要与数据类型相关

9.4、builtins有哪些?

9.5、常用的内建函数(Built-in Functions)


1、函数的定义与调用

1.1、什么是函数

开发语言中:函数是指实现某个功能的一段代码

def add(a,b):  # 要传入的参数,就在括号里边写参数;要是不传入的话,就不写    print("exec add function")    # 这里只是函数的内容,也算是把这些内容封装成函数    return a+b    # 这里只是定义了这个函数,没有执行print(add(1,2))result = add(3,4)print(result)# 1、方便维护,模块化设计# 2、减少代码冗余

1.2、使用函数的好处

模块化程序设计; 2、减少代码冗余 ;3、维护方便

1.3、函数的定义

1.3.1、函数的赋值

def func1():    print("hello")a = func1b = func1()print("##############")a()print(b)

 

2、函数参数

2.1、什么是函数参数

函数取得的参数是你提供给函数的值;这些参数就像变量一样,只不过它们的值是我们调用函数的时候定义的

2.2、参数的形式

参数在函数定义的圆括号对内指定,用逗号分割
1、形参:函数定义的时候,指定的参数
2、实参:函数调用的时候,传递的参数

2.3、参数分类

按形参来分:1、必选参数;2、默认参数;3、可变长位置参数:4、可变长关键字参数
按实参来分:1、位置参数;2、关键字参数

# 必选参数def stuinfo1(name, age, sex):   #必选参数    print(f"myname is {name},my age is {age},my sex is {sex}")# 位置参数stuinfo1('sc','4','man')   # 位置参数一一对应# 默认参数def stuinfo2(name, age, sex ='f'):  # 这个sex就是默认参数,如果有没传递参数,就默认这个    print(f"myname is {name}, my age is {age}, my sex is {sex}")stuinfo2("sc",4)stuinfo2('sc',4,'man')# 关键字参数stuinfo2('sc',sex='m',age=6)  # 这后边两个就是关键字参数,注意要是有位置参数存在,那就必须把位置参数放在最前面# 常见错误#1、stuinfo2('sc','m',age=6)   #如果是这样,'m'会给到age,然后后边又有一个age=6,这样是不行的# ⭐⭐⭐注意定义顺序,默认参数放在必选参数后边;注意调用顺序,关键字参数必须放在位置参数后边

2.3.1、参数的注意事项(⭐⭐⭐)

总的来说:1、注意定义顺序,默认参数放在必选参数后边;2、注意调用顺序,关键字参数必须放在位置参数后边

2.3.2、可变长位置参数

# 可变长位置参数,就是形参前边接个 '*'.可传递0-n个位置参数def myargs(name, *num):    print("*"*30)    print(f"{name}:{num}")   # 默认是打包成一个元组的    print(type(num),*num)  # -->print(type(num),1,2)myargs("sc")myargs("sc1",1)myargs("sc2",1,2)# 这是内部机制# packing(打包) 和 unpacking(解包)# packing# 1,2 -->元组(1,2)# *num   unpacking -->解包成print(1,2)

2.3.3、可变长关键字参数

# 可变长关键字参数def myargs2(**num):    print(num)myargs2(a=1,b=2)myargs2(a=1)myargs2(a=1,b=2,c=3)# packing  --> a=1, b=2  --> {"a":1,"b":2}  打包成字典# unpacking -->{"a":1,"b":2}  --> a=1,b=2。所以不可以使用print(**num)

>>> d1 = {'a':1,'b':2}>>> "{a}..{b}".format(**d1)'1..2'>>> "{a}..{b}".fORMat(a=1,b=2)'1..2'

2.3.4、参数定义顺序⭐

# 形参定义顺序# func01(必选参数,可变长位置参数,默认参数,可变长关键字参数)# 实参定义# func02(位置参数,关键字参数)

2.3.5、小练习

 

# method1def sum1(*args):    sum0 = 0    for i in args:        sum0 += i    print(f"可变长位置参数的和为{sum0}")def sum2(**kwargs):    sum3 = 0    for i,j in kwargs.items():        sum3 += j    print(f"可变长关键字参数的和为{sum3}")sum1(1,2,3,4,5)sum2(a=1,b=2,c=3)# method2   ⭐⭐def add(*num):    print(f"和为:{sum(num)}")add(1,2,3,4)def add2(**num):    print(f"字典和为:{sum(num.values())}")add2(a=1,b=2,c=3)

 

2.3.6、解包

容器类型都可以解包

(1)*num

list1 = ["a","1",3]print(*list1)d1 = {"a":1,"b":2}print(*d1)

 

(2)**num

d1 = {"a":1}d2 = {"b":2}d3 = {"a":2,"b":4}print(dict(d1, **d2))  # -->dict(d1,b=2)print(dict(d1, b=2))print("a is {a}, b is {b}".format(a=1, b=2))print("a is {a}, b is {b}".format(**d3))

 

3、函数返回值

3.1、函数return的语句

# 函数的return语句# 退出函数,并且返回结果的# 一个函数一旦执行到return就退出,就不会执行后边的语句# 如果函数没有return语句,默认返回None。如果return后边不接任何表达式,也是返回None# return可以有多个# return 一次也可以返回多个值def maxnum(x, y):    print("return  语句...")    if x > y:        print("return x")        return x    elif x < y:        print("return y")        return y    return x, y    print("return end....")    # 由结果可以看到这个语句并没有执行result = maxnum(2, 3)result = maxnum(3, 3)print(f"结果为:{result}")  # 这里可以看到我们若是return两个值,它会返回一个元组

def maxnum(x, y):    print("return  语句...")    if x > y:        print("return x")        # return x    elif x < y:        print("return y")    #     return y        #没有'return y'这个语句等价于'return',所以返回值为None    # return x, y    print("return end....")result = maxnum(2, 3)result = maxnum(3, 3)print(f"结果为:{result}")

 

4、匿名函数

4.1、匿名函数及其定义 

# 匿名函数# 不需要创建函数名# 只能有一个表达式,不用写return,该表达式的结果就是是返回值def add(a,b):    return  a+bprint(add(1,3))# 匿名函数不是这么用的,这里'add2'只是给出例子,更有利于理解匿名函数的用法。add2 = lambda x,y: x+y   # 这个匿名函数就等价于上述的函数print(add2(1,3))

4.1.1、map

格式:map(func,*iterables)

map(),是一个可调用对象func依次映射到序列的每个元素上,并返回一个可迭代的马匹对象。得到的map对象可以转化为列表元组或者集合,不转化的话,就无法看到结果。其中每个元素是原序列中元素经过可调用对象func处理后的结果,但该函数对原函数做任何修改。

b = map(str, range(5))print(b)# 执行结果:   ==》   表示结果放在内存里print(list(b))# 执行结果:['0', '1', '2', '3', '4']c = map(len, ['0', '123', '2bbda', 'ewf3', '4ayuiiu'])print(c)print(list(c))# map对象可以使用for循环读出for i in map(str, range(5)):    print(i, type(i))

高阶函数 

# 将列表中的元素全部平方lst = [1,2,3,4]print(list(map(lambda x:x*x, lst)))  # 把lst里边的值放入前边这个函数处理# 使用map将列表中的数保留两位小数lst1 = [0.23333, 3.14159, 7.256816]print(list(map(lambda x:round(x,2),lst1)))

 

 4.2、匿名函数——小练习(round的使用)

# 使用匿名函数返回两个数之间的最大值# max1 = lambda x, y: x if x > y else y# max1 = lambda x, y: max(x, y)max1 = lambda x, y: x > y and x or yprint(max1(7, 6))# 使用匿名函数,将传入的浮点数保留两位小数# reserve = lambda x: float('%.2f'%x)  # 这里边的是一个字符串,所以要进行转化# reserve = lambda x: float("{0:.2f}".format(x))  #reserve = lambda x:round(x,2)   # 使用round,来进行保留两位小数print(type(reserve(2.165654456)),reserve(2.165654456))

5、递归函数

# 递归函数# 自己调用自己,形成循环# 定义出口条件,什么时候结束递归# 通常是把一个大问题通过寻找规律可以缩小规模的时候使用的才能够使用的 # 求取n的阶乘# n! = 1*2*3*...*n# f(n) = n* f(n-1)# 有最大递归深度 996(可以改)# 尽量避免使用递归,除非没有更好的算法,或者是某种特定的情况下使用递归。# 每次递归都会保存结果在内存中,非常占内存,效率低下。# 所以能不用递归就不用递归def func01(n):    if n == 1:        return 1    return  n * func01(n-1)print(func01(3))   # 这是打印结果# 推算过程:func01(3) = 3 * func01(2) = 3 * 2 *func01(1) = 3 * 2 * 1

5.1、递归函数练习——使用递归实现斐波拉契数列

# 使用递归实现斐波拉契数列# 1,1,2,3,5,8,13.....def fblq(n):    if n == 1 or n == 2:        return 1    return fblq(n - 1) + fblq(n - 2)a = input("请输入数列项目:")str1 = ''for i in range(1, int(a) + 1):    str1 += str(fblq(i)) + ','print(str1)

5.2、递归函数练习——兔子繁衍问题

# 有一对雌雄兔,每两个月就繁衍雌雄兔一队,问n个月之后有多少对兔子# 第1,2月:1对# 第3,4月:2对# 第5,6月:4对# 第7,8月:8对# f(n) = f(n-2) *2def robbit(n):    if n == 1 or n == 2:        return 1    return robbit(n-2) * 2print(robbit(int(input("请输入你想要知道的月份"))))

5.4、 递归函数练习——爬楼梯问题

# 有一个人爬楼梯,他每一次都可以选择爬一阶或者两阶,他要爬n阶,有多少种选择# 比如:他在第九阶的时候,可能从第七阶或者第八阶爬上来# 规律:f(n) = f(n-1) + f(n-2)# 递归方法def climb(n):    if n == 0:        return 0    elif n == 1:        return 1    elif n == 2:        return 2    else:        return climb(n - 1) + climb(n - 2)print(climb(int(input("请输入你想要爬的楼层:"))))

 

# 动态规划方法def f1(n):    dp = [0] * n  # [0,0,0,0...0],n个0    dp[0] = 1    dp[1] = 2    for i in range(2, n):        dp[i] = dp[i - 1] + dp[i - 2]    return dp[n - 1]print(f1(5))

 

 6、函数的参数传递

从动态类型看函数的参数传递,函数的参数传递,本质上传递的是引用

6.1、不可变数据类型

def func1(x):    print("第一个x",x)    # 局部变量    x = 100    print("第二个x",x)# 全局变量x = 1func1(x)print(x)  # 这能说明局部变量只是在那个函数里有用

6.2、可变数据类型

# 可变数据类型def f1(x):    x.append(1)  x不会改变x的本身,只是改变了x的内容    print(x)a = [12]f1(a)f1(a)f1(a)

 

6.3、 定义参数的时候,默认参数避免定义成一个可变数据类型⭐⭐⭐

# 参数定义的时候,默认参数避免定义成一个可变数据类型# a=[]  在创建函数的时候就已经创建好了def f(a=[]):  # 这样会造成每个调用都相关联,因为[]是一个可变数据类型    a.append(1)    print(a)f()f()f()

7、变量作用域

7.1、局部变量和全局变量

# 变量的作用域def f():  # 形参不能够与后边这个定义的全局变量同名    # 这里边第一个x就是为局部变量    # x = 2  # 如果你要申明全局变量,那就不要在前面又定义个同名的局部变量    global x  # 申明x为全局变量,最好直接放在函数最上边    x = 5x = 1f()print(x)  # 这里打印的是全局变量output:5

7.2、内建变量

内建变量是由双下划线开头和双下划线结尾的

7.3、变量名的解析原则(查找顺序为:LEGB)

1)在本地变量中找 -- local
2)在任意上层函数中找 -- enclosing
3)在全局作用域中找 -- global
4)在内置作用域中找 -- built-in(python内建变量,解释器创建的) 

# 要是在以上作用域中找到了就输出,要是都没有找到就报错# print(a)# print(__name__)def f():    x = 2  # {2,1}    def f2():        x = 3    # 不注释的时候输出'3',x的注释顺序以及输出结果{1,2}        print(x)        print(__name__)    f2()x = 1  # {3,报错}   然后换__name__实验,把x语句都注释掉__name__ = 'sc'    # 没注释,就输出'sc';注释了就输出'__main__',因为这是一个内置函数f()

8、文档注释(Document String)

文档注释是包、模块、类或者是函数第一个用三引号引起来的字符串

def f():    """    this is test func    f()    :return:    """    print("hello")print(help(f))  # 函数的文档注释会被help识别

9、内建函数与工厂函数

9.1、函数和方法

9.2、内建

 

9.3、工厂函数

一般就是类型转换函数。工厂函数属于内建函数

9.3.1、工厂函数主要与数据类型相关

9.4、builtins有哪些?

builtins主要是四个方面:1、内建异常;2、内建变量;3、工厂函数;4、内建函数

9.5、常用的内建函数(Built-in Functions)

来源地址:https://blog.csdn.net/m0_48638643/article/details/122426596

--结束END--

本文标题: 8、Python——python函数(函数分类以及定义与调用、参数注意事项、内建函数、参数分类、变量定义域)

本文链接: https://www.lsjlt.com/news/413679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 8、Python——python函数(函数分类以及定义与调用、参数注意事项、内建函数、参数分类、变量定义域)
    目录 1、函数的定义与调用 1.1、什么是函数 1.2、使用函数的好处 1.3、函数的定义 1.3.1、函数的赋值 2、函数参数 2.1、什么是函数参数 2.2、参数的形式 2.3、参数分类 2.3.1、参数的注意事项(⭐⭐⭐) 2.3.2...
    99+
    2023-09-21
    python 开发语言 后端
  • Python 函数调用&定义函数&函数参
    一.函数调用 在python中内置了很多函数,我们可以直接调用 。想要调用函数首先要知道函数的名称及包含的参数,还可以通过查看python官方的文档:https://docs.python.org/3/library/functions....
    99+
    2023-01-30
    函数 定义 Python
  • Python中函数定义及参数实例
    1.函数定义     函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字 ,可以通过函数名在程序的不同地方多次执行(这通常叫函数调用)预定义函数(可以直接使用)自定义函数(自己编写)为什么使用函数?    降...
    99+
    2023-01-31
    函数 实例 定义
  • python-自定义函数(定义调用、默认参数、返回值)
    python-自定义函数 文章目录 python-自定义函数初识函数函数的定义与调用函数的定义:参数列表:函数体:函数调用 默认参数定义默认参数:默认参数的使用:默认参数的位置:默认参数...
    99+
    2023-09-10
    python 开发语言 numpy
  • C语言函数分类自定义参数及调用方法是什么
    本篇内容主要讲解“C语言函数分类自定义参数及调用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数分类自定义参数及调用方法是什么”吧!1.  函数是什么?提到函数,我们...
    99+
    2023-06-21
  • Python---限定函数参数的类型及默
    python作为一门动态语言,在使用变量之前是不需要进行定义,而是通过动态绑定的方法将变量绑定为某种类型。这样做为我们使用变量时提供了方便,但有时也给我们使用变量时造成了一定的困扰,例如在使用变量时不知道变量的类型,使用函数时不知...
    99+
    2023-01-31
    函数 参数 类型
  • python函数的默认参数为什么不可以定义可变类型
    这篇文章主要介绍“python函数的默认参数为什么不可以定义可变类型”,在日常操作中,相信很多人在python函数的默认参数为什么不可以定义可变类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python函...
    99+
    2023-06-29
  • python函数的默认参数请勿定义可变类型详解
    目录函数的默认参数请勿定义可变类型可变类型和不可变类型定义可变类型会有什么问题?导致的原因解决方法关于可变类型作为默认参数时的注意点测试:将可变类型列表换为字典测试:来个不可变类型字...
    99+
    2024-04-02
  • Python 函数的定义与调用
    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世...
    99+
    2023-10-12
    python 开发语言
  • C++ 中如何定义和调用可变参数函数?
    在c++++中,使用...(省略号)定义可变参数函数,允许函数接受任意数量的参数;调用时,将其视为固定参数函数即可。 如何在 C++ 中定义和调用可变参数函数? 可变参数函数(又称变参...
    99+
    2024-04-12
    c++ 可变参数函数 标准库
  • C语言函数基础教程分类自定义参数及调用示例详解
    目录1.  函数是什么?2.  C语言中函数的分类2.1 库函数2.1.1 为什么要有库函数2.1.2 什么是库函数2.1.3 主函数只能是main()吗2.1.4常见的库函数2.2...
    99+
    2024-04-02
  • Python函数参数传递以及变量作用域详解
    这篇文章主要介绍“Python函数参数传递以及变量作用域详解”,在日常操作中,相信很多人在Python函数参数传递以及变量作用域详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python函数参数传递以及变...
    99+
    2023-06-04
  • python中函数的参数如何定义和使用
    这篇文章主要介绍“python中函数的参数如何定义和使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中函数的参数如何定义和使用”文章能帮助大家解决问题。一、参数的定义1、函数的参数在哪...
    99+
    2023-07-02
  • 巧用 Python 函数:从定义到调用,再到参数传递
    函数定义 Python 函数的定义使用 def 关键字,函数名后跟一对圆括号。圆括号中可以包含参数,参数之间用逗号分隔。函数体写在冒号后面,缩进表示函数体。 def greet(name): """ 向某人打招呼。 Arg...
    99+
    2024-02-06
    Python 函数 函数定义 函数调用 参数传递
  • Python中函数的定义及其调用
    一、函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用 函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封...
    99+
    2024-04-02
  • python定义内置函数怎么调用
    Python中的内置函数可以直接通过函数名来调用。例如,要调用内置函数print(),可以使用以下方式: print("H...
    99+
    2024-02-29
    python
  • Python中自定义函方法与参数具有默认值的函数
    目录一、Python中自定义函数的方法1自定义函数的语法2自定义函数的实现3自定义函数的调用二、Python中参数具有默认值的函数1参数是常量默认值的函数2参数是常量默认值的函数一、...
    99+
    2024-04-02
  • python如何在函数内定义全局变量
    使用python在函数中定义全局变量的方法在python函数中使用全局变量时,需要使用global进行声明,否则它会隐藏该全局变量。示例:x = 1def func():global xprint xx = 2print xprint xf...
    99+
    2024-04-02
  • Python函数定义与使用的示例分析
    这篇文章主要介绍Python函数定义与使用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!函数的定义什么是函数? &mdash; > 函数是具有某种特定功能的代码块,可以重复使用(在前面数据类型...
    99+
    2023-06-29
  • Python中如何自定义函方法与参数具有默认值的函数
    这篇“Python中如何自定义函方法与参数具有默认值的函数”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中如何自...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作