Python第四章(3)

1.函数
为了定义python函数,可以依次输入def,函数名,带有函数参数的圆括号,最后紧跟一个冒号,函数命名规范和变量名一样,
(必须使用字母或者下划线开头,仅能含有字母,数字,下划线)

首先,定义和调用一个没有参数的函数:


def do_nothing():


输出:
pass  #函数中的pass表明函数没有做任何事情

通过输入函数和参数调用此函数
print(do_nothing())

同样是没有做任何事情
现在,定义一个无参数,但打印出一个单词的函数:
def make_a_sound():
print('quack')
print(make_a_sound())       #在调用make_a_sound()函数时,python会执行函数内部的代码,在该列子中,函数打印吃单个单词,并返回主程序

输出:
quack
def agree():
return True
输出:
None
调用该函数,使用if语句检查它的返回值
def agree():
print("splendid")
else:
print("that was unexpected")
输出:
splendid
定义带有一个anything参数的函数echo(),它使用return语句将anything返回它的调用者两次,并在两次中间插入一个空格,
传入到函数的值称为参数,当调用含参数的函数时,这些参数的值会被复制给函数中的对应参数,在下面的列子中,被调用的函数
echo()的传入参数字符串是‘rumplestiltskin’,这个值被复制给参数anything,然后返回到调用方(在这个列子中,输出两次字符串,
中间有一个空格)
def echo(anything):     #带有参数的函数
return anything + '' + anything
print(echo('rumplestiltskin'))    #调用参数
输出:
rumplestiltskinrumplestiltskin

该函数做了以下事情:
.把‘blue’赋值给函数的内部参数color
.运行if-elif-else的逻辑链
.返回一个字符串
.将该字符串赋值给变量comment
.打印出comment
def commentary(color):
if color == 'red':
return 'it\'s a tomoto'   #用\‘和\"来表示单双引号,由其当该字符串由相同类型的引号包裹时
elif color == 'green':
return 'it\'s a green pepper'
elif color == 'bee purple':
return 'I don\'t  kown what it is,but only bees can see it'
else:
return "I've never heard of the color " + color + "."
comment = commentary('blue')
print(comment)
输出:
I've never heard of the color blue.

一个函数可以接受任何数量(包括0)的融合类型的值作为输入变量,并且返回任何数量(包括0)的任何类型的结果,
如果函数不显示调用return函数,那么会默认返回None
print(do_nothing)


2.有用的None
None是Python中特殊的值,区别None和False的差别:
thing = None
if thing:
print("it's some thing")
else:
print("it's no thing")
输出:
it's no thing

#为了区分None和布尔值False
if thing is None:
print("it's nothing")
else:
print("it's something")
输出:
it's nothing

#写一个函数,输出它的参数是否是None
def is_none(thing):
if thing is None:
print("it's None")
elif thing:
print("it's True")
else:
print("it's false")
is_none(None)
输出:
it's None

is_none(True)
输出:
it's True

is_none(False)
输出:

it's false

is_none(0)

输出:
it's false

is_none(0.0)
输出:
it's false

is_none(())
输出:
it's false

is_none([])
输出:
it's false

is_none({})
输出:
it's false

is_none(set())
输出:
it's false


3.位置参数
下面创建一个带有位置参数的函数,并且返回一个字典:
def menu(wine,entree,dessert):
return {'wine':wine,'entree':entree,'dessert':dessert}
menu('chardonnary','chicken','cake')
输出:
{'wine': 'chardonnary', 'dessert': 'cake', 'entree': 'chicken'}



尽管这种方法很常见,但是位置参数的一个弊端就是必须熟记每个位置参数的含义,,在调用函数menu()时,误把最后一个参数
当成第一个参数,会得到完全不同的结果
menu('beef','bagel','bordeaux')
输出:
{'wine': 'beef', 'dessert': 'bordeaux', 'entree': 'bagel'}  (错误的)


4.关键字参数
为了避免参数带来的混乱,调用函数时可以指定对应的参数的名字,甚至可以采用与函数定义不同的顺序调用:
menu(entree='beef',dessert='bagel',wine='bordeaux')
输出:
{'wine': 'bordeaux', 'dessert': 'bagel', 'entree': 'beef'}

也可以把位置参数和关键字参数混合起来,首先实例化参数wine,然后对参数entree和dessert使用关键字参数
menu('frontenac',dessert='flan',entree='fish')
输出:
'wine': 'frontenac', 'dessert': 'flan', 'entree': 'fish'}

* 如果同时使用位置参数和关键字参数,位置参数必须放在关键字参数前面


5.指定默认参数值
当调用方没有提供对应的参数值时,可以指定默认的参数值
def menu(wine,entree,dessert = 'pudding'):
return {'wine':wine,'entree':entree,'dessert':dessert}
print('chardonnay','chicken')
输出:
{'entree': 'chicken', 'dessert': 'pudding', 'wine': 'chardonnay'}

如果提供参数值,在调用时会替代默认值
menu('dunkefelder','duck','doughnut')
输出:
{'entree': 'duck', 'dessert': 'doughnut', 'wine': 'dunkefelder'}

在下面的列子中,函数bugg()在每次调用时,添加参数arg到一个空的列表result,然后打印出一个单值列表,但是存在一个问题:只有
在第一次调用时列表是空的,第二次调用就会存在之前调用的返回值
def buggy(arg,result = []):
result.append(arg)
print(result)
buggy('a')
输出:
['a']
buggy('b')
输出:
['a', 'b']

如果写成下面这种形式就能解决上面的问题
def works(arg):
result=[]
result.append(arg)
return result
works('a')
输出:
['a']
works('b')
输出:
['b']

下面这种方式也能实现;
def nonbuggy(arg,result = None):
if result is None:
result = []
result.append(arg)
print(result)
nonbuggy('a')


输出:
['a']
nonbuggy('b')
输出:
['b']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值