python基础6-函数的参数

2019-12-05 21:51栏目:龙竞技官网
TAG:

一、位置参数

调用函数时根据函数定义的参数位置来传递参数。

#!/usr/bin/env python
# coding=utf-8

def print_hello(name, sex):
    sex_dict = {1: u'先生', 2: u'女士'}
    print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生'))


# 两个参数的顺序必须一一对应,且少一个参数都不可以
# print_hello('tanggu', 1)

前言

  系列文章:[传送门]

  继续干起来!!

形参与实参
形参:在函数定义阶段,括号内定义的参数的称为形参,就相当于变量名
实参:在函数调用阶段,括号内定义的参数的称为实参,就相当于变量值
也就是说形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定
二者区别:
实参:是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
形参:虚拟的,不占用内存空间,形参变量只有被调用时才分配内存单元

二、关键字参数

用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

# 以下是用关键字参数正确调用函数的实例
# print_hello('tanggu', sex=1)
# print_hello(1, name='tanggu')
# print_hello(name='tanggu', sex=1)
# print_hello(sex=1, name='tanggu')

# 以下是错误的调用方式
# print_hello(name='tanggu', 1)
# print_hello(sex=1, 'tanggu')

通过上面的代码,我们可以发现:有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

正文

   我们已经接触过函数,函数是可以被引用的(访问或者以其他变量作为其别名),也作为参数传入函数,以及作为列表和字典等等容器对象的元素(function)的参数(arguments)传递。

     传递函数

      形式参数

      位置参数

        默认参数

      关键字变量参数

具体应用:
#1、位置参数:按照从左到右的顺序定义的参数
位置形参:必选参数
位置实参:按照位置给形参传值
#2、关键字参数:按照key=value的形式定义的实参
无需按照位置为形参传值
注意的问题:

三、默认参数

用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

# 正确的默认参数定义方式--> 位置参数在前,默认参数在后
def print_hello(name, sex=1):
    ....

# 错误的定义方式
def print_hello(sex=1, name):
    ....

# 调用时不传sex的值,则使用默认值1
# print_hello('tanggu')

# 调用时传入sex的值,并指定为2
# print_hello('tanggu', 2)

位置传递

例子:

def f(a,b,c):
    return a+b+c

print(f(1,2,3))

#在调用f时,1,2,3根据位置分别传递给了a,b,c。

  1. 关键字实参必须在位置实参右面
  2. 对同一个形参不能重复传值
    #3、默认参数:形参在定义时就已经为其赋值
    可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
    注意的问题:
  3. 只在定义时赋值一次
  4. 默认参数的定义应该在位置形参右面
  5. 默认参数通常应该定义成不可变类型
    #4、可变长参数:
    可变长指的是实参值的个数不固定
    而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,*args 没有key值,**kwargs有key值。

四、可变参数

定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

形式参数

实例1:
def test(x,y): #括号里面的就是位置形参
print('this x:%s' %x)
print('this y:%s' %y)
test(1,2) #再调用时向函数的位置形参传递的位置实参

1、包裹位置传递

def func(*args):
    ....


# func()
# func(a)
# func(a, b, c)

我们传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包裹位置传递。

关键字传递

  用位置传递会感觉比较死板。关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。

例子:

print(f(c=3,b=2,a=1))

  关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:

print(f(1,c=3,b=2))

#必须存在唯一的必须参数

实例2:
def foo(x,y): #定义形参
print(x,y)
foo(1,y=2) #这里在调用时1赋值给x这个是位置形参,y=2是关键字参数,那么结果就是打印1和2,如果,如果foo(y=2,1)这样写那么是错误的,因为x是没有值的

版权声明:本文由龙竞技官网发布于龙竞技官网,转载请注明出处:python基础6-函数的参数