Python基础【函数】
admin
2023-07-15 08:21:53
0

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
可以根据自己的需求自行封装代码块,以便于调用。即为自定义函数。


函数定义的规则

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 - 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。
  • 不带表达式的return相当于返回 None。

    格式:

    def 函数名(参数列表):
    函数体

    默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来。
    无需传递参数时,也可不加参数


实例:

def hello(): ##def空格后加函数名hello和()
print('hello world') ##函数内部输出'hello world'
hello() ##调用定义好的函数

测试结果:

Python基础【函数】


参数的传递

在 python 中,类型属于对象,变量是没有类型的:
可更改(mutable)与不可更改(immutable)对象
不可更改的对象:strings, tuples,numbers
可以修改的对象:list,dict

  • 在传递可变对象时,函数内部对参量的改变会影响该对象
  • 在传递不可变对象时,函数内部对参数的改变对该对象本身无影响

实例:

def fun(a,b): ##定义函数fun
a = 'test' ##修改参数a的值
b[2] = 'test' ##修改参数b中的值
num = 'str' ##定义数值类型(不可变)
list_test = [2,3,4] ##定义列表类型(可变)
print(num,list_test) ##输出传递参数之前的值
fun(num,list_test) ##调用函数
print(num,list_test) ##输出传递参数之后的值

测试结果:

Python基础【函数】


参数类型

  • 必需参数(位置参数):
    调用函数时,参数必须按照顺序和对应数量传入。
    def fun(num,age,score):
    函数体
    fun(1,18,98)     ##调用时按照顺序且数量相同
  • 关键字参数:
    调用函数可以不按照函数声明的顺序,关键字参数来确定传入的参数值。
    def fun(num,age,score):
    函数体
    fun(age=18,score=98,num=1)
  • 默认参数:
    在函数声明时为形参设定默认值,调用函数未传入参数时使用默认参数。
    def fun(num=1,age=18):
    函数体
    fun()  ##未传参数时使用函数定义时的默认参数
  • 不定长参数:
    函数传入参数值不定时,将多余的参数以元组形式封装。
    
    def fun(*num):
    函数体
    fun('hello','1','2')  ##实参数超过形参数,其余参数以元组形式封装,在函数中用num调用```


def fun(**num): ##使用可传入字典类型的参数
函数体
fun(key1=value1,key2=value2)```

def fun(num,*,age): ##*号后面的参数必须用关键字传入
函数体
fun(1,age='20')

函数的返回值

return语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。
不带参数值的return语句返回None。
如果返回多个值,会将多个值封装成元组返回
def hello():
return('hello')
print(hello()) ##将函数作为参数调用时,return语句返回的值,即为函数的值
##这里相当于print('hello')


变量作用域

程序的变量并不是在哪个位置都可以访问的。
访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
Python的作用域一共有4种,分别是:

  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域
  • B (Built-in) 内建作用域
    以 L > E > G >B 的优先级查找:

     x = int(2.9)  # 内建作用域

    g_count = 0 # 全局作用域
    def outer():
    o_count = 1 # 闭包函数外的函数中
    def inner():
    i_count = 2 # 局部作用域

  • Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域
  • 其它的代码块(如 if/elif/else/、try/except、for/while等)内定义的变量,在其所在作用域的其他范围仍然生效

global和nonlocal关键字

  • 在内部作用域需要对全局变量进行更改时
    须在内部作用域使用global关键字声明
    num = 1
    def fun1():
    global num  # 需要使用 global 关键字声明
    print(num) 
    num = 123
    print(num)
    fun1()
    print(num)
  • 在内部作用域需要对外层非全局变量进行更改时
    须在内部作用域使用nonlocal关键字声明
    def outer():
    num = 10
    def inner():
    nonlocal num   # nonlocal关键字声明
    num = 100
    print(num)
    inner()
    print(num)  # num值为100
    outer()

参数检测

isinstance(object,classinfo)

  • 来判断一个对象是否是一个已知的类型,类似 type()。
    • object -- 实例对象。
    • classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
    • 返回值 -- 如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。

匿名函数

lambda 用来创建匿名函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
lambda 函数的语法只包含一个语句
lambda [arg1 [,arg2,.....argn]]:expression

fun = lambda arg1, arg2: expression
fun( 10, 20 ) ##调用时函数的返回值即expression的值

相关内容

热门资讯

特朗普:正致力于与伊朗达成协议... 特朗普在《纽约邮报》一档播客访谈节目中称,他正与伊朗磋商一项协议,伊朗已同意不再谋求拥有核武器。他表...
不接壤的日菲为何偷划海界? 日菲近日发表联合声明,宣称就“划定两国专属经济区和大陆架的海洋边界”启动正式谈判。两个隔海相望的国家...
凤凰晚报丨从钳工到老戏骨,魏宗... 今日人物【从钳工到老戏骨,魏宗万用一生诠释“戏比天大”】6月1日,表演艺术家魏宗万在上海逝世,享年8...
科威特称伊朗袭击致63人受伤 科威特卫生部门3日称,伊朗当天对科威特的袭击已造成63人受伤,相关部门已启动紧急应对预案,并在全国范...
日本标榜“和平国家”却行扩军备... 今年是东京审判开庭80周年,世界正回望历史、反思战争罪责、捍卫二战后来之不易的国际秩序之际,日本却迈...
浙江杨梅即将大规模上市,如何破... “我们现在的压力很大。”5月底,浙江余姚杨梅产区丈亭镇副镇长林宇站在一片杨梅林前对第一财经表示,当地...
致5死2伤!韩国就韩华航空航天... 【环球网报道 记者 姜蔼玲】据韩联社6月1日报道,针对位于韩国大田的韩华航空航天公司发生爆炸致7人伤...
黄河科技学院2026年招生简章 长按图片识别二维码或点击 “阅读原文” 查看电子招生简章。
医路起航,从“心” 开始!黄河... 6月1日上午,黄河科技学院附属医院2022级临床医学本科实习生入院岗前培训在大医讲堂顺利举办。院领导...
问题居然在实体卡槽上!美版iP... 6月2日消息,日前,又有博主提前把还没发布的iPhone 18 Pro电池参数给曝光了出来,根据爆料...