实参的类型 | 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学习站

相关文章
|
2月前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
26天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
21天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
60 8
|
27天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
27天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
38 7
|
28天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
42 5
|
27天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
70 3
|
1月前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。