python自学篇九[ 函数(一):参数+对象]

python基础系列:
python自学篇一[ Anaconda3安装 ]
python自学篇二[ pycharm安装及使用 ]
python自学篇三[ 判断语句if的使用 ]
python自学篇四[ 基本数据类型和字符串常用处理 ]
python自学篇五[ 列表 ]
python自学篇六[ 元组 ]
python自学篇七[ 字典+深拷贝与浅拷贝 ]描述
python自学篇八[ 循环:while+for+pass+range()+推导式 ]
python自学篇九[ 函数(一):参数+对象 ]
python自学篇九[ 函数(二):返回值return+yield+迭代器+生成器 ]
python自学篇九[ 函数(三):变量作用域+ATM+5个小练习 ]
python自学篇九[ 函数(四):递归函数+匿名函数+内置函数+高阶函数 ]
python自学篇十[ 面向对象 (一) :面向对象概念+定义类+练习一]
python自学篇十[ 面向对象 (二) :继承+多继承+类属性+实例属性]
python自学篇十[ 面向对象 (三) :访问限制+类方法+静态方法]
python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]
python自学篇十一[ 模块简介+模块制作+dir()函数+标准模块+包]
python自学篇十二[ 文件:打开+读取+写入+3个习题]

函数概述

组织好的、可重复使用的、用户实现单一或者关联功能的代码段。函数能够提高应用的模块性和代码的重复利用率。Python提供了很多内置的函数,比如len等等,另外也可以根据自己的业务需求进行用户自定义函数的创建。

  • 定义规则
    函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
    任何传入参数和自变量必须放在圆括号中间。
    函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    函数内容以冒号起始,并且缩进。
  • 语法
 def 函数名([参数列表]):      #参数列表可选项
	函数体
  • 函数调用
    Python内置了很多函数,内置函数可以直接调用。调用一个函数需要知道函数的名称和函数的参数。
函数名([参数列表])
  • 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋值给一个变量,相当于给这个函数起了一个别名
students=[2,3,4,3,23,43]
a=len #变量a指向len函数
num=a(students) #可以通过a调用到len函数
print("studnets列表元素的个数为:",num)

函数参数

形参和实参

形参:定义函数里面的是形参
实参:调用函数时传递的是实参

必备参数

  • 函数定义中允许拥有多个形参,因此函数在调用的时候,也可能包含多个实参。向函数传递参数的方式有很多,通过实参和形参的顺序对应,这就是位置实参。只有位置一致,才能被正确匹配。位置实参是最简单也最常用的关联方式。
 def getInfo(name,address):
     print('大家好我叫%s,我来自%s'%(name,address))
getInfo('刘德华','香港')  #第一个实参对应了第一个形参,第二实参对应了第二个形参。
#参数的个数不能少,不能多。 参数的位置要一一对应

关键字参数

  • 关键字实参是传递给函数的名称-值对。直接在实参中将名称和值关联起来,因此向函数传递实参时不会混淆。函数调用使用关键字参数来确定传入的值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值.
 def getInfo(name,address):
     print('大家好我叫%s,我来自%s'%(name,address))
 getInfo(name='刘德华',address='香港')  #给实参加上关键字 。关键字对应我们的形参

默认参数

  • 函数定义的时候,设置的参数是形参。那么也可以给每个形参指定一个默认值。当调用函数时,如果没有传入实参,就使用形参的默认值。如果调用的时候传入了实参,那么程序将使用传入的实参。
def getInfo(name,address = '香港'): #默认值参数,就是在声明函数的时候给形参赋值
    print('大家好我叫%s,我来自%s'%(name,address))
getInfo('刘德华')   #有默认值的形参,可以不用传递
getInfo('刘德华','九龙')   #如果传递参数,会覆盖原来的默认值

不定长参数

  • 你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。
    语法如下:
  • *args 是接受所有未命名的参数(关键字)
  • **agrs2 是接受所有命名的参数(带关键字的)
def getInfo(name,address,*args,**agrs2):
    print('大家好我叫%s,我来自%s'%(name,address))
    print(args)  #args 是一个元组类型
    print(agrs2)  #字典数据类型
    
getInfo('刘德华','九龙','a','b','c','d',age = 18)

结果:

大家好我叫刘德华,我来自九龙
('a', 'b', 'c', 'd')
{'age': 18}

可变对象与不可变对象的传递

  • 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict,set等则是可以修改的对象。
  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了
区别
  • 不可变对象(值传递):传递的是对象的值,不是对象本身,如果修改值,修改的是另一个复制的对象,不会影响原来对象的本身
def fun(args):
    args = 'hello'   #重新赋值
    print(args)   #输出hello

str1 = 'baby' #声明一个字符串的变量   不可变数据类型
fun(str1)    #将该字符串传递到函数中
print(str1)   #还是baby  并没有被改变
  • 可变对象(引用传递):传递对象自己。函数内部如果修改值会影响对象本身。
def fun(args):
    args[0] = 'hello'   #重新赋值
    print(args)   #输出

list01 = ['baby','come on'] #声明一个字符串的变量   不可变数据类型
fun(list01)    #将该字符串传递到函数中

print(list01)  #传递的是对象本身,函数里面被修改了值,原对象也会跟着修改
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值