Python函数笔记

函数

一、什么是函数(function)

函数是可以重复利用的、用来实现单一功能的代码。

比如当你使用print()函数时,可以把文本显示出来;当使用int()函数时,可以把某些数据转换为整数。
函数一般都带括号(),括号里放的是参数
比如print()函数的括号里可以放不同的文本内容,print()函数会帮你在屏幕上显示不同的内容

print('字符')

函数也可以没有参数,比如:exit()函数,可以不用输入参数,(当然,里面也是可以加参数的:exit(‘再见’)

二、定义和调用函数

虽然Python里面有很多内置函数,但我们可以定义函数。
试想,如果有一段代码,常常会被用到,难道每次当我们需要它的时候就又复制粘贴一遍?虽然复制粘贴也不累,但是代码追求的是简洁和清晰。
那么这时,我们就可以定义一个新的函数了。

def greet(name):
    print(name+'早上好')

null result
def的意思是定义(define),greet是函数名(自己取名),括号里面的name是参数(自己取名)
第二行要缩进(:代表下一行缩进),第二行是函数内部的代码(函数体)
但是定义完成后,并不会显示任何东西,因为还没有调用函数。

def greet(name):
    print(name+'早上好')

greet('老师')

result

三、参数

这里的’李莫愁’和’赤练神掌’是对应参数person和skill的位置顺序传递的,所以被叫作位置参数,这也是最常见的参数类型。
每个人都有自己的爱好,是默认的,这里就可以用到默认参数。'作恶’是对应默认参数 hobby

#默认参数必须在位置参数之后
def fight(person,skill,hobby = '作恶'):
    print(person + '的技能:' + skill)
    print('爱好:' + hobby + '\n')

#因为已经默认将'作恶'传递给hobby,调用时无须再传递
fight('李莫愁','赤练神掌')
fight('公孙止','闭穴功')

#如果采用下面这种形式传递,就不需要理会参数位置
fight(person = '张无忌',skill = '乾坤大挪移')

result
如果一个参数的值是相对固定的,那么设置默认参数就免去了每次都要传递的麻烦。但默认参数并不意味着不能改变

#一个萝卜一个坑,因为前两个参数已经有对应的值传递,Python会自动将'侠义之事'传递给参数hobby。
fight('张无忌','乾坤大挪移','侠义之事')

result
每个人的爱好都不可能只有一个,而且你又不好限定数量,为解决这个问题不定长参数就能派上用场,即不确定传递参数的数量。

它的格式比较特殊,是一个星号*加上参数名,来看下面的例子。

def man(*hobby):
    print(hobby)

man('吃饭','睡觉','打豆豆')
#这几个值都会传递给参数barbeque

result
输出的结果是元组类型,所以可以遍历

def fight(person, skill, *hobby):
    print(person + '的技能:' + skill)
    for i in hobby:
        print('爱好:' + i)

fight('李莫愁', '赤练神掌','吃饭','睡觉','打豆豆')

result
需要注意的是,这时候默认参数也需要放在不定长参数的后面,否则会报错

def fight(person, skill, *hobby,doing='练功'):
    print(person + '的技能:' + skill)
    print('正在:' + doing)
    for i in hobby:
        print('爱好:' + i)

fight('李莫愁', '赤练神掌','吃饭','睡觉','打豆豆')

三、Return

return的意思是返回,就是你给一个参数给函数,函数会返回一个值给你。刚刚的greet() 函数是没有给你返回值的,它只是执行了一个打印的功能,它没给回你一个值。

1、return和print()的区别

有 return语句

def greet(name):
    return name+'早上好'

n = greet('老师')
print(n)

result
无 return语句

def greet(name):
    print(name+'早上好')

n = greet('老师')
print(n)

result
可以看到定义的语法是一致的,不同只在于函数内部没有return。这里的函数只是把文本内容打印在屏幕上,但并没有返回一个值给我们,所以我们之后是使用不了什么数据的,而return是有返回一个字符串给我们的。

四、变量的作用域

当定义一个函数时候,很重要的事情就是要理解变量的作用域

局部变量:一个函数内定义的变量,只能在该函数里使用。

全局变量:在函数外定义的变量,能在程序任何位置使用。

#局部变量
def test():
    score = 95
test()
print(score) 

wrong
NameError: name ‘quantity’ is not defined
翻译成中文:变量quantity未定义,其实,我们定义了,只不过是在函数test() 内定义的,但问题是我们不能在定义的函数外面使用这个变量。

#全局变量
score = 95
def test():
    print(score) 
test()

right

局部变量和全局变量的优先级

局部变量的优先级大于全局变量的优先级
为了让程序更易读以及避免可能会出现的麻烦,建议局部变量和全局变量不要取相同的名字,以免混淆。

score = 95
def test():
    score = 100
    print(score)

def test2():
     print(score)
test()
test2()

result

函数内修改全局变量的值

global 变量名

score = 95
def test():
    global score #修改全局变量
    score = 90
    print(score)
def test2():
     print(score)
test()
test2()

result

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值