资源经验分享python自学篇九[ 函数(一):参数+对象]

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

2020-01-02 | |  91 |   0

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

原文来自:CSDN      原文链接:https://blog.csdn.net/Web_Student/article/details/103792677



函数概述

组织好的、可重复使用的、用户实现单一或者关联功能的代码段。函数能够提高应用的模块性和代码的重复利用率。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)  #传递的是对象本身,函数里面被修改了值,原对象也会跟着修改

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:python自学篇八[循环:while+for+pass+range()+推导式]

下一篇:python自学篇九[ 函数(二):返回值return+yield+迭代器+生成器]

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...