Python函数——基本概念和参数

1、基础格式

定义一个python函数,需要def、函数名、带有函数参数的圆括号、最后紧跟冒号
先举一个基础的例子

def no_thing():#没有参数的函数
	pass
2、参数&返回值

一个python函数可以接受任何数量(包括0)的任何类型的值作为输入变量,0即无参函数,如上面的代码块

一个python函数可以返回任何数量(包括0)的任何类型的结果,如果函数不显示地调用return函数,那么会默认返回None

注意❗:在其他语言中(如C、C++),一个函数只能有一个返回值

3、有用的None

None是Python中的一个特殊值,虽然他不表示任何数据,但仍然具有重要作用。

①None作为布尔值时和False一样

thing = None
if things:
	print("It's some thing")
else:
	print("It's no thing")

代码运行结果如下:
在这里插入图片描述

②None与False的区别
读者在学习时,需要把None不含任何数值的数据结构区分开来。

0值的整型/浮点型、空字符串(’ ')、空列表([ ])、空元组( (,) )、
空字典({ })、空集合(set())都等价于False,但是不等价于None

③区分None和False
为了区分None和布尔值False 的区别,使用Python 的is操作符:

thing = None
if thing is None:
	print("It's nothing")
else:
	print("It's somrthing")

在这里插入图片描述
练习:
写一个函数,判断他的参数是否是None

def is_none(thing):
	if thing is None:
		print("It's None")
	elif thing:
		print("It's Ture")
	else:
		print("It's False") 
4、位置参数

Python处理参数的方式要比其他语言更加灵活。其中,最熟悉的参数类型是位置参数,传入参数的值是按照顺序依次复制过去的。

创建一个带有位置参数的函数:

def menu(wine,entree,dessert):
	#返回一个字典
	return{'wine':wine,'entree':entree,'dessert':dessert}

print(menu('红酒,'begel','牛肉'))

在这里插入图片描述

尽管这种方式很常见,但是位置参数的一个弊端是必须熟记每个位置参数的含义。在调用menu()函数时,如果误把最后一个参数当作是第一个参数,会得到完全不同的结果

print(menu('牛肉','begel','红酒'))

在这里插入图片描述

5、关键字参数

为了避免位置参数带来的混乱,调用参数时可以指定对应参数的名字,甚至可以采用与函数定义不同顺序的调用:

print(menu(entree='begel',dessert='牛肉',wine='红酒')

在这里插入图片描述
当然,也可以把位置参数和关键字参数混合起来。首先,实例化参数wine,然后对参数entree和dessert使用关键字参数的方式

print(menu('红酒',dessert='牛肉',entree='begel'))

在这里插入图片描述

6、指定默认参数值

当调用方没有提供对应的参数值,可以指定默认参数值。这个听起来很普通的特性实际上很有用,以之前的例子为例:

def menu(wine,entree,dessert='牛肉'):
	return('wine':wine,'entree':entree,'dessert':dessert)

print(menu('红酒','begel'))

如果提供了参数,则会代替默认值。
注意:默认值一定是从右开始,因为函数参数从左开始结合

默认参数值在函数被定义时已经计算出来了,而不是在程序运行时。
千万不能把一个可变的数据类型(例如列表或字典)当作默认参数值

def buggy(arg,result=[]):
	result.append(arg)
	print(result)

buggy('a')
buggy('b')  #expect ['b']
buggy('c')  #expect ['c']

在这里插入图片描述函函数buggy()在每次调用时,添加参数arg到一个空的列表result中,然后打印出一个单值列表。但是存在一个问题,函数只有在第一次调用时列表是空的,第二次调用时,就会存在之前调用的返回值

如果写成下面的样子就可以解决刚才的问题:

def works(arg):
	result = []
	result.append(arg)
	print(result)

works('a')
works('b')  
works('c') 

在这里插入图片描述

7、使用*收集位置参数

如果读者之前了解过C/C++编程,可能会认为*和指针有关,然而,Python中是没有指针概念的。

当参数被用在函数内部时,星号(*)将一组可变数量位置参数集合成参数值的元组

def print_args(*args):
	print('Positional argument tuple:',args)

print_args(3,2,1,'wait!','uh!') 
#给函数传入的所有参数都会以元组形式返回

在这里插入图片描述
如果函数同时有限定的位置参数,那么*arg会收集剩下的参数

def print_more(required1,required2,*args):
	print('required1:',required1)
	print('required2:',required2)
	print('All the rest:',args)
	
print_more('cap','flowers','scarf','wax','gloves')

在这里插入图片描述

8、使用**收集关键字参数

使用两个星号(**)可以将参数收集到一个字典中,参数的名字是参数的键,对应参数的值是字典的值。

def print_kwargs(**kwargs):
	print('keyword argument:',kwargs)

print_kwargs(wine="红酒",dessert="牛肉")

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值