Pyhton函数篇(一)之函数中的形参与实参

1:什么是函数

  函数其实就是带名字的代码块,用于完成一些具体的工作。如果我们在写一段程序的时候,需要多次用到同样的一个功能,如果每次都要重复写相同的代码,不仅会增加我们的代码量,更会让我们写出的代码让别人看起来觉得很low,而如果我们把功能作为一个代码块封装在一个函数里,每次仅需要调用这个函数,是不是就很方便了?这就是函数的意义所在

1.1 函数的定义方式  

  函数的定义使用def关键字,如下:

def user():                        def 关键字后面加函数名定义函数,定义以冒号结尾
    """内部代码块"""                使用三引号来构成文档字符串,用来解释该函数的主要功能,这是一个很好的编码习惯
    print("Hello World")       函数体,用来写该函数需要完成的功能的代码
user()                 使用函数名()的方式调用函数

1.2 向函数传递参数信息

  在定义函数的时候,可以在函数的()内加入变量,在调用函数的时候就可以给函数传入对应的值,以上个例子稍作修改:

def user(username):
    """内部代码块"""
    print("Hello World,"+username)    在定义函数的时候传入变量username,在调用该函数的时候就可以通过传值来让函数实现相应的功能
user("尼古拉斯赵四")输出结果:Hello World,尼古拉斯赵四

2 形参和实参

  从名字就可以看出,实参是一个实实在在存在的参数,是实际占用内存地址的,而形参只是意义上的一种参数,在定义的时候是不占内存地址的,如在上面例子中,username就是一个形参,尼古拉斯赵四是我在调用函数时传入的一个实参,它的值被存储在形参username中。

  函数的调用中,可能存在多个实参,在给函数传递参数的时候只要有两种方式,位置实参和关键字实参,每个实参都由变量名和值组成,实参还可以是列表、字典

  1.位置实参

  在调用函数的时候,必须将每个实参都关联到函数定义中的每一个形参,最简单的关联方式就是基于实参的顺序。

def func(x,y,z):              首先在定义函数的时候传入3个形参x,y,z
    print(x,y,z)
func(3,2,1)           在调用该函数时,通过位置实参的方式,将实参映射到形参,一一对应,即x=3,y=2,z=1运行结果:3 2 1

  需要注意一点的就是,如果使用位置实参的方式传值,传入的实参个数必须与形参相同,否则运行程序会报。

  2.关键字实参

  关键字实参是通过关键字-值的方式,关键字实参的方式就不需要考虑函数调用过程中实参的顺序。同一个参数不能传两个值

def func(x,y,z):
    print(x,y,z)
func(x=1,y=2,z=3)             通过关键字=值的方式,将实参与形参关联映射,不需要考录形参的顺序,顺序也可以改变,即y=2,z=3,x=1 ,运行的结果不会发生改变
运行结果:
1 2 3

  3.既有顺序,又有关键字

def func(x,y,z):
    print(x,y,z)
func(1,y=2,z=3)               在两种方式混用的时候,顺序实参必须要放在关键字实参之前,否则会程序报错,如 1,y=2.3 \ y=2 1,3这种方式都不可行
运行结果:
1 2 3

  4.默认值   

  在定义函数的时候,也可以指定形参的默认值,如果在调用函数时给函数提供了实参时,Python将使用指定的实参值,否则的,将自动调用形参的默认值。因此,如果给形参指定了默认值后,在调用时可以不用给它传值,使用默认值可以简化函数的调用。如:

def func(x,y=2):             定义函数的时候在这里给形参设置了默认值y=2
    print(x,y)
func(1)             在调用此函数时,只传入了一个实参,y的值就会使用默认值
运行结果:
1 2

  还可以在调用的时候,更改默认值 ,如

def func(x,y=2):
    print(x,y)
func(1,3)                    在调用该函数的时候,给设置了默认值的形参y再次赋值,这运行结果会使用新传入的实参值运行结果:1 3

  在使用形参默认值的时候需要注意:在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。这让Python依然能够正确的解读位置实参。

def func(x=2,y):
    print(x,y)
func(1)                        这种情况程序是不允许运行的

  即:在函数调用过程中,可以混合使用位置实参,关键字实参和默认值参数,但是其中相关的规则一定要遵循,否则一定会导致程序的运行出错。

  当提供的实参多于或少于函数定义时所提供的形参时,程序会报错,这时只要根据报错信息正确修改即可。

  5.列表和字典

  当不确定需要传入的值是多少时,在定义形参的时候,可以使用*args(列表),**kwargs(字典)来表示。

def func(*args,**kwargs):        使用*args代表列表。**kwargs代表字典,这种形式可以在调用函数的时候传入多个实参
    print(args)
    print(kwargs)
func(*[1,2,3,4,5],**{"y":1})     如果想要传入的值以列表或字典的形式显示出来,就需要在元素前加上*或** 运行结果:

(1, 2, 3, 4, 5)
{‘y‘: 1}

3 函数的返回值

  函数不是直接显示输出的,相反,它会处理一些数据并返回一个或一组值。在函数中用return语句将值返回到调用函数的代码行,返回值能将程序大部分繁重的工作移交到函数中去完成,从而简化主程序。

  下面是一个简单的程序,接收姓氏和名称,返回完整的人名信息

def name(first_name,last_name):
    """返回人的姓名"""
    full_name=first_name+" "+last_name
    return full_name
print(name("尼古拉斯","赵四"))
运行结果:
尼古拉斯 赵四

  函数可以返回任何类型的值,包括字典、列表这样较复杂的数据结构。还是上面的例子,返回一个表示人的字典

def name(first_name,last_name,):
    """返回人的姓名"""
    full_name={"first":first_name,"last":last_name}
    return full_name
print(name("尼古拉斯","赵四"))
运行结果为:
{‘first‘: ‘尼古拉斯‘, ‘last‘: ‘赵四‘}

  函数传递列表,传递列表在函数中很有用,在列表中包含数字、名字甚至更复杂的对象,下面举一个例子:

def func(names):
    """向列表中的所有用户问号"""
    for i in names:
        print("Hello"+" "+i+"!!")
func(["刘能","赵四","尼古拉斯"])
运行结果:
Hello 刘能!!
Hello 赵四!!
Hello 尼古拉斯!!

  函数还可以结合while循环,下面是我自己写的一个很简单的例子,用户输入姓氏和名字,最终输出完整的一句话。

def name(first_name,last_name,):
    """返回人的姓名"""
    full_name=first_name+last_name
    return full_name

while True:
    print("\nplease tell me your name ")
    f_name=input("first name:")
    l_name=input("last name:")
    print("\n Hello"+name(f_name,l_name)+"!")            输入姓氏和名字,通过name函数整合后,输出结果

  

时间: 2024-07-31 00:46:14

Pyhton函数篇(一)之函数中的形参与实参的相关文章

javascript函数篇三、函数声明提升

变量提升想必大家都比较熟悉了,那么什么是函数声明提升呢?首先我们来了解下常用的两种函数定义方式: 1. 函数声明 2. 函数表达式 下面来看下两种方式定义函数.函数声明语法定义函数 function fn (n) { return n * 2 } 函数表达式定义函数 var fn = function (n) { return n * 2 } *那么两种方式定义函数有什么区别呢?***对于函数声明与函数表达式两种定义函数的方式,解析器会率先读取函数声明,并使其在执行任何代码之前可用,*这个过程叫

关于java中的形参和实参的区别-----转载

首先纠正下java2000的第一个错误说法:"java里不叫这个,而是叫传值和传对象.".引用jiabobber的话:形参就是形式上的参数啊,实参就是实际的参数啊,其实各种语言形参实参都一样的概念的吧. jiabobber的这句话是对的,实参,形参是程序设计语言中的通用概念,并不是只有C,C++有而JAVA没有,也不叫传对象; 直白的讲,形参是形式上的参数,实参是实际的参数;形参只是对实参的一种抽象类型描述,只是声明一个函数(方法)能接受什么类型的实参,而不确定接受的实参具体内容是多少

关于Java中的形参和实参的区别

形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用. 实参出现在主调函数中,进入被调函数后,实参变量也不能使用. 形参和实参的功能是作数据传送.发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送. 1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元.因此,形参只有在函数内部有效. 函数调用结束返回主调函数后则不能再使用该形参变量. 2.实参可以是常量.变量.表达式.函数等, 无论实参是何种类型的量,在进行函

ABAP函数篇1 日期函数

1. 日期格式字段检查 data:l_date type ekko-bedat. l_date = '20080901'. CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY' EXPORTING DATE                            = l_date EXCEPTIONS PLAUSIBILITY_CHECK_FAILED       = 1 OTHERS                          = 2 . IF SY-SUBRC

c++ 中在形参与实参之间的值传递

主要是对比直接传递与引用类型.指针类型之间的区别. 1 #include <iostream> 2 using namespace std; 3 4 class MyClass 5 { 6 public: 7 int a; 8 void method(); 9 }; 10 void MyClass::method() 11 { 12 cout<<"the last value of class:a after fun:"<<a<<'\n'

Python函数篇

1.函数名的命名规则: 函数名必须以下划线或字母开头,可以包含任意字母.数字或下划线的组合.不能使用任何的标点符号: 函数名是区分大小写的. 函数名不能是保留字. 2. 形参和实参 形参:形式参数,不是实际存在,是虚拟变量.在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应) 实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参 区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,占用

关于Java中形参与实参的理解

今天阅读了一个写的非常棒的博文,通过此博文再次复习了Java中参数传递的知识(即值传递与引用传递的区别).参考网站http://www.cnblogs.com/binyue/p/3862276.html.下面我将通过次博文记录自己的理解,还望能够帮助再学Java或者复习Java的朋友们. 一.基本类型与引用类型在内存中的保存内容 Java中的变量分为基本类型和引用类型两种.基本类型的变量保存数值本身,而引用类型的变量保存的是引用值,即指向内存空间的地址. 基本类型包括:byte,char,int

Android总结篇系列:Activity中几个主要函数详解

专注Android领域开发. 仰望星空,同时需要脚踏实地. ——好记性不如烂博客 Android总结篇系列:Activity中几个主要函数详解 Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又需要有一定深入了解的几个函数进行讲解,后续本文会根据需要不断更新. 1. startActivityForResult / onActivityResult

跟着百度学PHP[5]函数篇2-PHP中的特殊形式的函数

目录...................................................... .00x1 可变函数 .00x2 回调函数 .00x3  . ........................................................... 00x1 可变函数的使用 在PHP里面如果说将“函数名称”赋予字符串类型的变量.在调用这个变量的时候如果使用带有小括号,那么PHP就会将该作为函数解析.这就叫可变函数. 注:可变函数不可以用于echo,p