Python基础——函数位置,关键字,默认值参数

函数里面的基本概念,小笔记录下来~

python中函数定义中的变量叫做形参;函数调用中的变量叫做实参

站在形参的角度:1.位置参数;2.默认值参数;3.混合参数:位置参数在前,默认值参数在后

站在实参的角度:1.位置参数;2.关键字参数;3.混合参数:位置参数在前,关键字参数在后

总结要点写在前面,下面一一填坑。

  • 位置参数

分为位置形参与位置实参,鉴于函数定义中常有多个位置形参,因此函数调用中也常有多个位置实参。所以重点来了,在只有位置参数的时候,需要实参与形参的顺序一一对应即相同顺序。

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
def func(name, food):#name与food为函数定义中的位置形参
    print(name + " eat " + food + "!")

func("akai", "noodles") #位置实参,按记住形参含义,按顺序一一对应
func("noodles", "akai") #位置实参不按顺序,则会出问题

#akai eat noodles!
#noodles eat akai! #不按顺序闹笑话
  • 默认值参数

全名默认值形参,在编写与定义函数时可以给每个形参定义默认值。在函数调用时如果给形参提供了实参(关键字实参数),python将使用指定的实参值;否则,将使用形参的默认值

def func(food = "noodles"):#默认值形参
    print("akai eat "+food)

func()#没改变直接调用默认值参数
func(food = "beef")#给形参提供实参,改变默认值,这里剧透下叫做关键字实参

#akai eat noodles
#akai eat beef
  • 形参中的混合参数

上述的例子都只是含有单一的形参,要是两个混合在一起,不按规矩来就会乱套,所以有了混合形参中的法则:位置参数在前,默认值参数在后。但其实,在混合参数中,默认值参数依然是被作为位置参数来看待的。

def func(name, food="noodles"):#位置形参在前,若是在后就会报错
    print(name + " eat " + food +"!")

func("akai")
func("akai",food="beef")
func("akai","beef")#没有写成关键字参数,不影响它被看做是位置参数的本质
func(food="beef",name="akai")#见下,关键字参数

#akai eat noodles!
#akai eat beef!
#akai eat beef!
#akai eat beef!
  • 关键字参数

 关键字实参是传递给函数名称——值对。你直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。有一个好处就是:无需考虑函数调用中的实参顺序,还清楚的指明了函数调用中各个值的用途。关键字参数之间不存在顺序!

def func(name, food):
    print(name + " eat " + food + "!")

func(name= "akai", food= "beef")
func(food= "noodles", name= "akai")#关键字参数的顺序无关紧要

#akai eat beef!
#akai eat noodles!
  • 实参中的混合参数

在混合形参中已经有所展示了,牢记:位置实参在前,关键字实参在后;关键字参数无先后

  • 一道题目

如果默认值参数变成一个可变的数据类型,如列表,字典。

def func(val, list=[]):
    list.append(val)
    return list

list1 = func(10)
print('list1= {0}'.format(list1))

list2 = func(20, [])
print('list2= %s' % list2)

list3 = func('a')
print('list3= %s' % list3)

#题目答案
#list1= [10]
#list2= [20]
#list3= [10, 'a']

解释:1.默认值参数在函数定义时就已经算出来了,而不是在函数运行时;2.默认值参数是一个可变的数据类型,那么如果有人调用它的时候改变了它,其他位置用到也跟着改变。

解决方案:1.每次调用,像例子中调用函数2一样,位置参数跟一个空列表;2.不在形参中加入可变数据类型一类的默认值参数,要创建空列表的话,在函数体内创建。

提前占个动态参数*args,**args的坑,以后填上!

如有错误,欢迎指正!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值