python中的函数

想必大家对于函数并不陌生,下面就让我们一起来看一看怎么编写自己的函数吧。

def my_compare( a , b ):
	if a > b:
		print( 'The max is %s' %a );
	else:
		print( 'The max is %s' %b );

fun_my = my_compare;
fun_my(10,20)

对于函数定义,需要使用的格式为 def、函数名、小括号中的参数和冒号':',然后在缩进中编写函数体,函数的返回值需使用return。

作为一个程序员,需要时刻小心传入参数不合法的问题,即对于my_compare函数,我们希望比较的参数是整型或者浮点型,但当用户不小心输入字符串时,my_compare函数并不会告诉用户说:对不起,您输入的参数有误,应输入整型。python函数为我们提供了数据类型检查工具instance(),isinstance(object,classinfo)函数用来判断一个对象是否和一个已知类型的相同,当对象和已知类型相同时函数返回True,否则返回False,如下所示:

# -*- coding: utf-8 -*-
def my_compare( a , b ):
	if not isinstance( a , ( int ,float ) ):
		raise TypeError( ' 对不起,您输入的第一个参数类型有误 ' );
	if not isinstance(  b , ( int ,float ) ):
		raise TypeError( ' 对不起,您输入的第二个参数类型有误 ' );
	if a > b:
		print( 'The max is %s' %a );
	else:
		print( 'The max is %s' %b );
fun_my = my_compare;
fun_my('aaa','bbb')

交互行命令输出为


为什么明明输入的两个参数都是字符串类型,可第二个参数没有报错呢?这是因为python中if语句是从上到下执行的,当第一个if 的条件不满足时,python就会抛出错误并结束语句。

是不是上面判断isinstance()需要两次if语句判断,显得有些复杂呢?对于isinstance函数可不可以只需要一个if判断语句呢?这时就是布尔值派上用场的时候了,还记得and、or、not么?

# -*- coding: utf-8 -*-
def my_compare( a , b ):
	if not ( isinstance( a , ( int ,float ) ) or  isinstance( b , ( int ,float ) ) ) :
		raise TypeError( ' 对不起,您输入的参数类型有误 ' );
	if a > b:
		print( 'The max is %s' %a );
	else:
		print( 'The max is %s' %b );
fun_my = my_compare;
fun_my('aaa','bbb')

这时交互行输出为



对于Python来讲,大家都希望其能有默认的参数,这样当调用函数的时候就只需要传递没有默认值的参数就好了。

# -*- coding: utf-8 -*-
def my_compare( a , b = 1 ):
	if not isinstance( a , ( int ,float ) ) or  isinstance( b , ( int ,float ) ) :
		raise TypeError( ' 对不起,您输入的参数类型有误 ' );
	if a > b:
		print( 'The max is %s' %a );
	else:
		print( 'The max is %s' %b );
fun_my = my_compare;
fun_my(10)

输出为

虽然默认参数方便了函数的使用,但是一定要注意的是默认参数一定要放在最后面且为不变对象!!!

默认参数一定要放在最后面且为不变对象!!!

默认参数一定要放在最后面且为不变对象!!!

可变参数:

在Python中,为我们提供了一中特殊的参数,可变参数。也就是说参数的数量是可变的,这样就省去了我们一一定义参数的步骤。但是需要注意的是,这种可变参数一般用在for循环中,比如需要计算几个数的和:

def summation( *num ):
	for ii in num:
		if not isinstance( ii , ( int ,float ) ):
			raise TypeError('输入类型有误')
	sum = 0 ;
	for n in num:
		sum = sum + n;
	print( "The sum is %s" %sum)
summation(1,2,3,4,6 )

输出为

The sum is 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值