实参的类型 | Python从入门到精通:高阶篇之四

简介: 本节重点介绍参数的类型,它可以是任意的数据类型。

参数传递的方式 | Python从入门到精通:高阶篇之三

实参的类型

创建函数

def fn2(a):
    print('a =',a)

fn2(123)

执行结果:

image.png

def fn2(a):
    print('a =',a)

#b=123
a= 123
#fn2(b)
fn(a)

执行结果:

image.png
image.png

其中形参的a跟函数外面的a,并没有关系,并不会被覆盖掉,之后我们会有详细的解释。

函数在调用时,解析器不会检查实参的类型,实参可以传递任意类型的对象。

def fn2(a):
    print('a =',a)

b = True
b = 'hello'
b = None
b = [1,2,3]
#fn2(b)

fn2(fn)

执行结果:

image.png
image.png
image.png
image.png
image.png

我们可以去调用这个函数。

def fn2(a):
    print('a =',a)
    a(1,2,3)

fn2(fn)

执行结果:

image.png

可以发现,fn是之前定义的一个函数,我们执行fn2(fn),并不是调用fn2(fn()),所以执行的结果是a是一个函数。所以实参可以传递任意类型的对象,数字、布尔值、字符串、列表、函数等都可以。

但是这其中也会有一些问题。

def fn3(a , b):
    print(a+b)

#fn3(123,456)
fn3(123,"456")

执行结果:

image.png
image.png

我们可以得出,不支持int与str相加的操作,会导致程序出错,所以我们在传递参数的时候需要注意参数的类型。当然之后我们会有异常的检查,但当下我们需要注意在定义函数的时候需要尽量去将函数设置完整,检查类型,在传递参数的时候明确所要传递的类型的实参。

定义一个函数fn4
在每一个函数参数都是独立的,每个形参都只是在其本身的函数是有作用的。所以不同函数之间相同的形参并不影响。

def fn4(a):
     print('a =',a)

c = 10 
fn4(c)

print('c =',c)

执行结果:

image.png
image.png

在函数之外打印出的结果与函数输出的结果一致,现在针对于函数中的a重新赋值。

def fn4(a):
     a = 20
     print('a =',a)

c = 10 
fn4(c)

print('c =',c)

执行结果:

image.png

在函数中对形参进行重新赋值,不会影响其他的变量。
针对上面的函数再次做出修改:

def fn4(a):
    # a = 20
    # a是一个列表,尝试修改列表中的元素,此时所改的是对象
    # 如果形参指向的是一个对象,当我们通过形参去修改对象时
    #   会影响到所有指向该对象的变量
     a[0] = 30
     print('a =',a)

c = 10 
c = [1,2,3] 
fn4(c)

print('c =',c)

执行结果:

image.png
image.png

我们可以通过id去判断:可以发现id是一样的。

def fn4(a):
     a[0] = 30
     print('a =',a,id(a))

c = 10 
c = [1,2,3] 
fn4(c)

print('c =',c,id(c))

执行结果:

image.png

所以我们修改的时候需要注意所修改的是变量还是对象,避免对程序造成影响。
如果想要a与c是相互独立的,一个改变对另外一个没有影响,我们可以通过浅复制来解决,传递c的副本。

def fn4(a):
     a[0] = 30
     print('a =',a,id(a))

c = 10 
c = [1,2,3] 
#fn4(c)
fn4(c.copy())

print('c =',c,id(c))

执行结果:

image.png

当然,也可以有别的解决方式,通过切片来解决。

def fn4(a):
     a[0] = 30
     print('a =',a,id(a))

c = 10 
c = [1,2,3] 
#fn4(c)
#fn4(c.copy())
fn4(c[:])

print('c =',c,id(c))

执行结果:

image.png

配套视频课程,点击这里查看

获取更多资源请订阅Python学习站

相关文章
|
1月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
271 7
|
1月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
162 1
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
314 1
|
2月前
|
IDE 开发工具 开发者
Python类型注解:提升代码可读性与健壮性
Python类型注解:提升代码可读性与健壮性
262 102
|
1月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
1月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
457 1
|
2月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
180 5
|
3月前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
385 3
|
2月前
|
数据采集 存储 XML
Python爬虫入门(1)
在互联网时代,数据成为宝贵资源,Python凭借简洁语法和丰富库支持,成为编写网络爬虫的首选。本文介绍Python爬虫基础,涵盖请求发送、内容解析、数据存储等核心环节,并提供环境配置及实战示例,助你快速入门并掌握数据抓取技巧。

推荐镜像

更多
下一篇
oss云网关配置