广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python函数(一)之杵臼之交
  • 618
分享到

Python函数(一)之杵臼之交

函数杵臼之交Python 2023-01-30 23:01:13 618人浏览 八月长安

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

摘要

python函数 函数的作用:对功能进行封装,减少重复代码,方便维护,流程清晰明了,易于理解。 函数的结构:      def 函数名():            函数体            return语句 函数的返回值: 可以用

python函数

函数的作用:对功能进行封装,减少重复代码,方便维护,流程清晰明了,易于理解。


函数的结构:
      def 函数名():
            函数体
            return语句


函数的返回值:

  • 可以用于终止函数的运行,也可以返回一个值给调用者。
  • 如果函数不写返回值默认返回一个None。
  • 函数return可以返回任意数据类型。
  • 如果return多个值则返回的数据类型是元组。
  • 如果return一个数据,返回值是原数据类型。.

return返回一个值,如下:

def fun():
    return 1       # return 数字1
ret = fun()
print(type(ret),ret)

打印内容如下:
<class 'int'> 1 

return返回多个值,如下:

def fun():
  return 1,2,3,4   # return多个值
ret = fun()
print(type(ret),ret)

# 打印内容如下:
<class 'tuple'> (1, 2, 3, 4)

函数的参数:
形参:分为位置参数、默认参数、混合参数三种。
实参:分为位置参数、关键字参数、混合参数三种。

传参:指从实参到形参的传递过程。.

参数的顺序: 位置参数 > 默认参数(关键字参数),在默认参数前边写位置参数。

位置传参。如下:

def max_num(num1,num2):   # 返回最大的数字
    if num1 > num2:
        return num1
    else:
        return num2
ret = max_num(10,20)
print(ret)

打印内容如下:
20

默认参数,就是如果我们不传参数,函数执行形参中的默认参数。如下:

def max_num(num1=0,num2=2):  # 默认参数
    if num1 > num2:
        return num1
    else:
        return num2
ret = max_num()    # 我们不写参数
print(ret)

打印内容如下:
2

默认参数我们也可以传参,如下:

def max_num(num1=0,num2=2):
    if num1 > num2:
        return num1
    else:
        return num2
ret = max_num(num1=10,num2=20)  # 也可以(10,20),但既然定义了默认参数,最好在传参过程中,把关键字也写上
print(ret)

# 打印内容如下:
20

混合传参:

def max_num(num1,num2=2): # 参数中有位置参数和默认参数的称为混合参数,切记混合参数:位置参数必须放在默认参数前
    if num1 > num2:
        return num1
    else:
        return num2
ret = max_num(10,num2=20)  # 传参
print(ret)

# 打印内容如下:
20

关于默认参数的一些思考:

def extendList(val, list=[]):
    list.append(val)
return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
list4 = extendList('b')
list5 = extendList('c')

print("list1 = %s" % list1)
print("list2 = %s" % list2)
print("list3 = %s" % list3)
print("list4 = %s" % list3)
print("list5 = %s" % list3)

# 打印内容如下:
list1 = [10, 'a', 'b', 'c'] 
list2 = [123] 
list3 = [10, 'a', 'b', 'c'] 
list4 = [10, 'a', 'b', 'c'] 
list5 = [10, 'a', 'b', 'c'] 

通过打印结果可以发现list1、list3、list4、list5它们最终的结果是一样的。它们还有个共同点就是在传参的过程中没有填写默认参数,list2的默认参数因为传递了个空列表,所以结果和其它的不一样。由此可以总结:当省略默认参数时,虽然多次调用了函数,但是函数都是引用同一块的默认参数地址(应该是为了节省内存),当给默认参数传值的时候,函数开辟了一个新的空间给默认参数使用。

函数参数,动态参数。
动态参数分为两种:动态位置参数、动态默认参数。
动态位置参数:动态位置参数会接收所有位置参数,所以要想既使用位置参数又使用动态位置参数,一定要将位置参数放在动态位置参数前面。动态位置参数用return返回的是一个元组,动态位置参数约定俗成使用*args。


在定义形参如:def fun1(*args) 我们将*args定义形参的过程称作聚合,也就是将实参中的多个参数进行聚合。
调用函数传参如:fun1("Hello",123,"World")  我们将传递多个参数的过程称为打散。
下面是错误的示范:

def fun1(*args,buf):   # 动态位置参数在位置参数前,错误
    print(buf)
    print(args)
    return args
fun1("Hello",123,"World")

# 打印内容如下:
TypeError: fun1() missing 1 required keyWord-only argument: 'buf' 

原因在于动态位置参数会接收所有的参数,导致后面的位置参数无法接收参数导致报错。
下面是正确的写法:

def fun1(buf,*args): #位置参数在动态位置参数前面
    print(buf)
    print(args)
    return args
ret = fun1("Hello",123,"World")
print(type(ret)) 

# 打印内容如下;
Hello 
(123, 'World') 
<class 'tuple'> # 动态位置参数的返回类型 

但是一般如果用动态位置参数,就很少用位置参数了,上面这种情况一般也只是在特殊情况下会用到。从上面的结果可以得出结论:位置参数必须在动态位置参数前。

动态默认参数:会接收所有默认参数,如果形参中有默认参数,默认参数必须放在动态默认参数前面,动态默认参数用return返回一个字典。动态默认参数约定俗成的使用**kwargs。

def fun1(s2="1",**kwargs): # 默认参数必须放在动态默认参数前面
    print(s2)
    print(kwargs)
    return kwargs
ret = fun1(s="Hello",num=123,s2="World")
print(type(ret))

#打印内容如下:
World 
{'s': 'Hello', 'num': 123} 
<class 'dict'> #动态默认参数返回的是一个字典 

def fun(*args,**kwargs):  # 万能传参
    print(args,kwargs)
fun([1,2,3],(3,2,3),**{"电视剧":1,"电影":2}) # 字典需要打散传递给动态默认参数,如果不打散会被动态位置参数给接收了

# 打印内容太如下:
([1, 2, 3], (3, 2, 3)) {'电视剧': 1, '电影': 2}

在定义形参如:def fun1(**kwargs)我们将**kwargs定义形参的过程称作聚合,也就是将实参中的多个关键字参数进行聚合。
调用函数传参如::un1(s="Hello",num=123,s2="World") 我们将传递多个参数的过程称为打散,如果有字典,使用**dict打散。
小结:形参的位置参数顺序,位置参数 ==>动态位置参数==>默认参数==>动态默认参数。


名称空间
Python解释器开始执行之后,就会在内存中开辟一个空间,每当遇到一个变量的时候,就把变量名和值之间的关系记录下来,当遇到函数定义的时候,解释器只是把函数名读入内存,表示这个函数存在了,至于函数内部的变量和逻辑,解释器是不关心的。函数只是加载进来,只有当函数被调用和访问的时候,解释器才会根据函数内部声明的变量来进行开辟变量的内部空间,随着函数执行完毕,这些函数内部变量占用的空间也会随着函数执行完毕而被清空。 
命名空间分类:

  • 内置命名空间:存放python解释器为我们提供的名字、list、tuple、str、int这些都是内置命名空间。
  • 全局命名空间:我们直接在py文件中,函数外声明的变量都属于全局命名空间。
  • 局部命名空间:在函数中声明的变量会放在局部命名空间。

加载顺序:

  1. 内置命名空间
  2. 全局命名空间
  3. 局部命名空间(函数被执行的时候)

取值顺序:

  1. 局部命名空间
  2. 全局命名空间
  3. 内置命名空间

作用域:作用域就是作用范围, 按照生效范围来看分为全局作用域和局部作用域。   
全局作用域:包含内置命名空间和全局命名空间。在整个文件的任何位置都可以使用(遵循 从上到下逐步执行)。
局部作用域:在函数内部可以使用。
作用域命名空间:

  1. 全局作用域:全局命名空间 + 内置命名空间。
  2. 局部作用域:局部命名空间。

可以使用globals()函数来查看全局作用域中的内容:

num = 10
print(globals()) # 打印全局作用域的内容

# 打印部分内容如下:
'__cached__': None, 'num': 10}

使用locals()函数来查看局部变量:

def fun1():
num = 10
print(locals()) # 打印局部作用域中的内容
fun1()

# 打印内容如下:
{'num': 10} 

gloabal和nonlocal
gloabal:用于在局部空间内修改全局变量,如果全局变量不存在将创建一个全局变量。

def fun1():
    global num # 声明全局变量
    num = 10 # 修改全局变量,如果不用global声明在函数内部是不能修改全局变量的
        
    global new_num # 创建全局变量
    new_num = 200 # 给全局变量赋值

num = 20 # 全局变量
fun1() # 调用函数
print(num,new_num)

# 打印内容如下:
10 200 

nonlocal:必须在嵌套函数内,修改离它最近的那一层的局部变量,如果上一级不存在,继续向上一层找,一直到函数的最外层停止查找,找不到会报错。

def fun1():
    num = 10 # 局部变量
    def fun2():
        nonlocal num 向上一层查找局部变量num
        num = 200 #修改局部变量num
    fun2()
    print(num) # 打印局部变量num

fun1()        # 调用函数打印num最终结果

#打印内容如下:
200   # num被修改成了200

 

--结束END--

本文标题: Python函数(一)之杵臼之交

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

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

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

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

下载Word文档
猜你喜欢
  • Python函数(一)之杵臼之交
    Python函数 函数的作用:对功能进行封装,减少重复代码,方便维护,流程清晰明了,易于理解。 函数的结构:      def 函数名():            函数体            return语句 函数的返回值: 可以用...
    99+
    2023-01-30
    函数 杵臼之交 Python
  • Python之函数系列(一)
    每个编程语言中(诸如:Java、C++、C)等都有函数的,Python也不例外函数的主要作用有哪些呢?1、将程序的功能进行模块化,功能模块清晰2、减少重复代码的工作量3、便于阅读及维护、调试等一、函数的结束及返回值# -*- coding:...
    99+
    2023-01-31
    函数 系列 Python
  • Python之函数
    Python函数分为内置函数和自定义函数。内置函数可以理解为一些类的方法的快捷方式,供我们创建对象时来调用内置函数大概有以下这么多Python内置变量如何查看Python内置变量?print vars(){'__builtins__': &...
    99+
    2023-01-31
    函数 Python
  • Python之lambda函数
    匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。 lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。 语法: lambda [arg1 [,arg2,.....argn]]:expre...
    99+
    2023-01-31
    函数 Python lambda
  • Python 函数之seek
    1、seek函数  file.seek(off, whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位...
    99+
    2023-01-31
    函数 Python seek
  • python之函数isinstance
    1.判断变量是否是这个类型 >>> a=1 >>> isinstance(a,int) True >>> isinstance(a,float) ...
    99+
    2023-01-31
    函数 python isinstance
  • python 之 函数 2
    5.36 命名关键字 什么是命名关键字参数? 格式:在*后面参数都是命名关键字参数 特点: 1 必须被传值 2 约束函数的调用者必须按照key=value的形式传值 3 约束函数的调用者必须用我们指定的key名 def foo(x,y,...
    99+
    2023-01-31
    函数 python
  • python——Matplotlib之fill_between函数
    Matplotlib是Python提供的一套基于NumPy的绘图工具包,用Python实现与MATLAB相似的命令API,十分适合交互式绘制图表,成为Python中应用非常广的绘图工具包之一。 在对数据可视化时,为了突出某一段数据需要对部分...
    99+
    2023-10-05
    python matplotlib 开发语言
  • python基础之函数
    函数: # 什么是函数:一系列python语句的组合,可以在程序中运行一次或者多次 # 一般是完成具体的独立的功能 # 为什么要使用函数 # 代码的复用最大化以及最小化冗余代...
    99+
    2022-11-12
  • Python之函数进阶
    一.形参的动态参数: 动态参数,用于参数不确定时用. 格式: def fun (*args) fun(args) 1. 动态接收位置参数:动态参数必须在位置参数后.列子1.假如参数不确定时,如下的列子,每人饭量不一样,吃的种类不一样,此时...
    99+
    2023-01-30
    进阶 函数 Python
  • python之初识函数
      函数: 函数是对功能或动作的封装. 函数的语法和定义: def 函数名(): 函数体 调用函数: 函数名()   函数返回值: return : 返回 def yue(): print("拿出手机") ...
    99+
    2023-01-30
    函数 python
  • python语法之函数
    函数:   将特定功能代码编写在一个函数里   便于阅读和复用   对一组表达特定功能表达式的封装   使程序模块化 python内置函数:   input(),print(),eval()... 函数定义 函数语法格式:   de...
    99+
    2023-01-30
    语法 函数 python
  • Python之内置函数
    ''' 内置函数 :     作用域相关(2) :         locals : 返回当前局部作用域内的所有内容         globals : 返回全局作用域内的所有内容     基础数据类型相关(38) :         和数...
    99+
    2023-01-31
    函数 Python
  • python函数进阶之闭包函数
    目录闭包函数什么是闭包函数判断是否是闭包函数\__closure__cell_contents闭包函数的特点闭包函数的意义闭包函数 什么是闭包函数 如果内函数使用了外函数的局部变量,...
    99+
    2022-11-10
  • Python之map()函数详解
    文章目录 一、map() 函数简介1.1 map() 函数基本语法1.2 map() 函数+ lambda表达式1.3 map() 函数输入多个可迭代对象iterable1.4 查看返回的迭代...
    99+
    2023-09-24
    python 开发语言
  • python之装饰器(函数)
    1. 装饰器   遵循的原则:     开闭原则:   对功能的扩展开放  对代码的修改是封闭 # 通用装饰器写法 # 存在的意义: 在不破坏原有函数和原有函数调用的基础上,给函数添加新的功能. def wrapper...
    99+
    2023-01-30
    函数 python
  • Python之strip与split函数
    一、strip函数原型声明:s为字符串,rm为要删除的字符序列s.strip(rm)        删除s字符串中开头、结尾处,位于rm删除序列的字符s.lstrip(rm)       删除s字符串中开头处,位于 rm删除序列的字符s.r...
    99+
    2023-01-31
    函数 Python strip
  • python 之 python3内置函数
    一. 简介   python内置了一系列的常用函数,以便于我们使用,python英文官方文档详细说明:点击查看, 为了方便查看,将内置函数的总结记录下来。   二. 使用说明...
    99+
    2022-10-18
  • Python学习之函数 def
    目录一、函数概述二、函数的调用三、函数参数的使用规则1、位置参数2、关键字参数赋值3、位置参数和关键字参数混合使用4、参数组 **字典  *列表5、*列表6、**字典总结一...
    99+
    2022-11-12
  • Python基础之(七)函数
    建立函数 在Python中,规定了一种定义函数的格式,下面的举例就是一个函数,以这个函数为例来说明定义函数的格式和调用函数的方法。 def add_function(a, b): #冒号必须 c = a + b #缩进必须 ...
    99+
    2023-01-31
    函数 基础 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作