Code前端首页关于Code前端联系我们

Python基础入门笔记: 函数

terry 2年前 (2023-09-25) 阅读数 47 #后端开发

函数

以下是一些你可能使用过的函数示例:

判断数据类型:type(str) 
字符串类型数据转为整数型:int(str)
...
复制代码

按照规则不难找到。所谓在Python中使用函数,就是把要处理的对象放在名字后面的括号里就可以了。简单来说,函数就是这样使用的。你可以把东西塞进去以获得治疗结果。 Python 中还有其他这样的函数: Python基础入门笔记:函数

以 Python 3.5 版本为例,这样的函数有 68 个。它们被称为内置函数。这里的内置是指安装Python后就可以使用这些功能。

2.1 函数格式

定义函数的格式:Python基础入门笔记:函数

其中有def返回关键字。

注: 函数缩进之后的语句称为语句块。缩进是为了表名语句的逻辑和从属关系。缩进的问题是不能忽视的,否则代码将无法成功运行,所以这里需要特别注意。 ? 、base_down 和高度。这种传递参数的方法称为位置参数。

②关键字参数:当你调用函数时,你可以在每个参数名称后面分配一个我们想要发送的值,例如当你调用fun1函数时:fun1(a=1, b=2, c =3 )

看下图: Python基础入门笔记:函数

  • 第一行的函数参数是倒序传入的。由于它们是关键字参数,因此不会影响函数的正常运行。
  • 第二行函数参数按倒序传入。但当谈到第三个时,它就变成了位置的函数。不幸的是,这个方法是不正确的语法,因为如果是按照位置传递的话,最后的应该是高度参数的位置。但是高度值3是按照之前的名字输入的,所以冲突了。
  • 第三行函数参数按顺序传递。前两个作为关键字传递,最后一个作为位置参数传递。但位置参数不能跟在关键字参数后面,所以是错误的。
  • 第四行函数参数按顺序传递。前两个按位置传递,最后一个作为关键字参数传递。该功能可以正常运行。

③变长参数

有时在设计函数接口时,我们可能需要变长参数。也就是说,我们无法提前确定要提交的参数数量。

Python提供了元组方法来接受未直接定义的参数。该方法在参数前面添加一个星号*。如果调用函数时没有指定参数,则为空元组。我们也不能将无名变量传递给函数。例如:

def print_user_info( name ,  age  , sex = '男' , * hobby):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;

# 调用 print_user_info 函数
print_user_info( '小明' , 25, '男', '打篮球','打羽毛球','跑步')
复制代码

输出结果:

昵称:小明 年龄:25 性别:男 爱好:('打篮球', '打羽毛球', '跑步')
复制代码

从输出结果可以看出,* hobby是一个可变参数,hobby实际上是一个元组。

变长参数也支持关键参数。未定义的关键参数将被放入字典中。此方法是在参数前面加上**。将上面的例子改成如下:

def print_user_info( name ,  age  , sex = '男' , ** hobby ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;

# 调用 print_user_info 函数
print_user_info( name = '小明' , age = 25 , sex = '男', hobby = ('打篮球','打羽毛球','跑步'))
复制代码

输出结果:

昵称:小明 年龄:24 性别:男 爱好:{'hobby': ('打篮球', '打羽毛球', '跑步')}
复制代码

通过上面的例子和本例的对比,我们可以知道* hobby是一个可变参数,hobby其实是一个元组(原祖),** hobby是关键字参数,hobby是dict(字典)。

④ 只接受关键字参数

关键字参数使用方便,不易出现参数错误。所以有时我们定义的函数希望使用关键字参数来传递某些参数。此时我们应该做什么呢?这种效果可以通过将所需的关键字参数放在特定的*参数或单个*后面来实现,例如:

def print_user_info( name , *, age, sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;

# 调用 print_user_info 函数
print_user_info( name = '小明' ,age = 25 , sex = '男' )

# 这种写法会报错,因为 age ,sex 这两个参数强制使用关键字参数
#print_user_info( '小明' , 25 , '男' )
print_user_info('小明',age='22',sex='男')
复制代码

,如果你可以看穿年龄

sex 如果关键字参数不适用,会报错。 ?

——答案是肯定的。

Python 使用 lambda 创建匿名函数,也就是说,您不再使用 def 语句的默认形式来定义函数。

匿名函数主要有以下性质:

  • lambda只是一个表达式,函数体比def简单得多。
  • lambda 的主体是一个表达式,而不是代码块。 lambda 表达式只能封装有限的逻辑。
  • lambda 函数有自己的命名空间,无法访问其自身参数列表之外或全局命名空间中的参数。

基本语法: lambda [arg1 [,arg2,.....argn]]:表达式

示例:

sum = lambda num1 , num2 : num1 + num2;
print( sum( 1 , 2 ) )
复制代码

输出结果:3Alough♿no 该表达式允许您定义简单的功能,但用途有限。只能指定单个表达式,其值就是最终的返回值。即不能包含其他语言特性,包括多语句、条件表达式、迭代、异常处理等。

在匿名函数中,有一个特殊的问题需要注意。比如把上面的例子改一下:

num2 = 100
sum1 = lambda num1 : num1 + num2 ;

num2 = 10000
sum2 = lambda num1 : num1 + num2 ;

print( sum1( 1 ) )
print( sum2( 1 ) )
复制代码

你觉得结果会是什么?第一个输出是101,第二个是10001,结果不是,输出结果是这样的:

10001
10001
复制代码

这主要是因为lambda表达式中的num2是一个自由变量,它的值是在运行时绑定的,而不是定义的。它是当时绑定的,与函数的默认值参数定义不同。因此,遇到这种情况建议使用第一种解决方案。

作者:Jaybo

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门