Python-定义和调用函数,变量作用域,参数,匿名函数,递归函数

本文详细介绍了Python函数的基础概念,包括定义与调用、作用域规则、参数类型与检查,以及常见参数种类。涵盖了全局变量、局部变量、函数内部修改变量的方法,以及形参与实参的区别。此外,还涉及了匿名函数、递归函数和Python内置函数的使用实例。
摘要由CSDN通过智能技术生成

简介

在编程中,我们经常需要进行相同或者类似的操作,这些操作是由一段代码完成的,而函数的出现,可以帮助我们避免重复编写这段代码。
函数的作用就是把相对独立的某个功能抽象出来,使之成为一个独立的实体。
Python在世界被广泛使用的一个原因,就是Python中有大量的内置函数,这些内置函数可以帮助我们快速的构建各种类型的网站。

常用的内置函数:max,min,sum,divmod等等;
函数必须要有输入和输出。

1、如何定义和调用函数

定义一个函数,只需要以def开头即可。

函数名(get_max):和Python中其他的标识符命名规则相同,有效的函数名以字母或者下划线开头,后面可以跟字母数字和下划线,函数名应该可以反映函数所执行的任务。
注意函数名区分大小写
函数参数(num1,num2):调用一个函数时可以传递的参数,参数可以是一个,多个或者没有参数。
函数内容:任何有效的代码都可以出现在函数内部。
函数返回值(return result):函数执行完后返回的值,也可以不返回任何内容,不返回内容可以视为返回“None”。

def get_max(num1,num2):
    result = num1 if num1 > num2 else num2
    return result   

定义函数,函数的内容并不会执行

调用已经定义好的参数

def get_max(num1,num2):
    result = num1 if num1 > num2 else num2
    return result
max_num = get_max(30,80)
print(max_num)

得到返回值:
在这里插入图片描述

空函数

在这里插入图片描述

在这里插入图片描述

2、变量作用域

(1)全局变量

在函数外创建的变量,在全局生效的变量。

name在函数外创建,是全局变量。

def login():
    print(name)
name = 'admin'
login()

返回admin
在这里插入图片描述

(2)局部变量

在函数内部创建的变量,只能在函数内部生效的变量。

def login():
    name = 'admin'
login()
print(name)

报错,提示name未被定义,因为name在函数内部被定义,是局部变量。
在这里插入图片描述

(3)函数内部修改全局变量

当全局变量是不可变类型时:需要用global关键字声明修改的变量是全局变量。
当全局变量时可变类型时:不需要声明。

可变数据类型:list,dict,set
不可变数据类型:tuple,str,数值

代码中修改数值需要用global关键字声明,修改list不需要声明。

def hello():
    global money
    money += 10
    users.append('user1')
    print(money,users)
money = 100
users = []
hello()

执行结果:
在这里插入图片描述

3、函数参数

形参:形式参数,不是真实的值(定义函数时的参数)

实参:实际参数,是真实的值(调用函数时的参数)

(1)参数检查

isinstance(var,int) 判断变量var是否为int型

def get_max(num1:int,num2:int)->int:   ##定义函数并且注释出num1和num2需要的数值类型和返回值的类型进行提示
    """                                ##使用三引号会自动生成格式,来写出函数的使用说明
    求两数最大值
    :param num1:整数型1
    :param num2: 整数型2
    :return: 最大值
    """
    if isinstance(num1,int) and isinstance(num2,int):     ##判断num1和num2是否为整型
        return num1 if num1 > num2 else num2
    else:
        return 0
result = get_max(1,2)
print(result)
result1 = get_max(1,2.1)    ##num2不是int型
print(result1)

执行结果:
在这里插入图片描述

(2)常见的四类形参

必选参数

函数定义的参数调用时必须调入,并且在调用的时候数量和顺序必须和定义函数时的参数保持一致。

默认参数

可传可不传的参数

def pow(x,y=2):
    return x ** y    ##x的y次方
result = pow(3)
print(result)
result = pow(2,4)
print(result)

执行结果:
在这里插入图片描述

可变参数

参数个数会变化,可以传0,1,2,3…n个参数

需要关键字*args,args是元组

def my_sum(*args):
    print(args)
my_sum(1,2,3)
my_sum(1,2,3,4)
my_sum(1,)
my_sum()

执行结果:
在这里插入图片描述

关键字参数

kwargs存储在字典中
kwargs中可以自定义输入信息

def enroll(name,age=18,**kwargs):
    print(f"""
    入学信息:
    1、姓名:{name}
    2、年龄:{age}
    3、其他:{kwargs}
    """)
enroll('张三',country='china',english='GRE',sports=['篮球','羽毛球'])

执行结果如下:
在这里插入图片描述

4、拓展

匿名函数

匿名函数指一类无需定义标识符的函数或者子程序。
python用lambda语法定义匿名函数,只需用表达式而无需声明。(省略了用def声明函数的标准步骤)

注意:冒号前是输入的值,冒号后是输出的值。

get_max = lambda num1,num2: num1 if num1 > num2 else num2
print(get_max(11,22))
######################
S = lambda x,y=2: x ** y
print(S(2))

执行结果如下:
在这里插入图片描述

匿名函数对应的题目

在这里插入图片描述
实际上就是将数组用匿名函数重新排序,自己定义一个排序规则,然后再排序。
[ 0, 7, 0, 2 ]
[ 1, 0, 1 ,0 ]
这里的意思是如果nums内的元素num等于0,num就等于1,不等于0,num就等于0
然后用得到的数组再排序,最后输出。并未创建新的数。

nums = [0,7,0,2]
nums.sort(key=lambda num:1 if num==0 else 0)
print(nums)

拓展:将偶数排在前,奇数排在后

nums = [0,7,0,2]
nums.sort(key=lambda num:0 if num % 2 == 0 else 1)
print(nums)

递归函数

一个函数在内部调用自己本身,这个函数就是递归函数。

利用计算阶乘来说明:
阶乘就是n! = n*(n-1) *(n-2) … *1

def f(n):
    """
    计算阶乘
    :param n:输入的参数 
    :return: 返回的阶乘值
    """
    if n == 1:
        return 1
    else:
        return n * f(n-1)
print(f(4))

执行结果如下:
在这里插入图片描述
拓展:斐波那契数列

在这里插入图片描述

def Fs(n):
    if n == 1 or n == 2:
        return 1
    else:
        return Fs(n-1) + Fs(n-2)
print(Fs(4))
print(Fs(10))

执行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值