最终程序
# funcion 函式/功能
# function是用来【收纳】程式码的
# 它是个功能
# def wash(dry):
# print('加水')
# print('加洗衣液')
# print('旋转')
# if dry:
# print('烘衣')
# wash(True) # 使用function
# wash(False)
def say_hi():
print('hi!')
# say_hi()
def add(x=0, y=1):
print(x + y)
add(5)
add(y=5)
add(3, 4)
add(123, 2323)
def wash(dry=False, water=8):
print('加水', water,'分满')
print('加洗衣液')
print('旋转')
if dry:
print('烘衣')
wash(water=10) # 使用function
重点
parameter(参数)(形容成投币孔):
1、当function需要外部资料的时候,我们就设计投币孔(参数),把资料投进去function里。
(因为让function伸手出去外面拿东西不好)
2、如果function有投币孔就一定要投东西(除非有预设值)
3、投东西的时候自动是按照参数的顺序。
4、参数可以有“预设值“,那就不一定要投给它。
5、投东西给参数的时候可以”明确指定“要投到哪一个参数。
参数概念
好接下来我们要讲parameter 参数
你有没有注意到 我们刚刚写的这两个function呢 一个是wash 一个是say hi
这个括号裡面都没有东西 都空的
def wash(参数):
print('加水')
def say_hi(参数):
print('hi!')
参数 英文叫parameter 就是写在这个括号裡面的
烘干例子
我这边写一个dry
def wash(dry):
那这个function裡面的内容
我就再加一个if 如果dry 我们就印出烘衣
if dry的这个dry 就是上面这个dry 这就是我们说的参数
所以这个function现在有一个参数 dry
那有这个参数有什么好处 有什么用
我们使用这个function的时候 就可以填我要传进参数的东西
譬如说我现在要传true进去 传一个布林值true 这个true就会被传到dry身上 true会被投进dry身上
我喜欢把参数叫做投币孔 像玩游戏那种投币孔
所以现在true投进来dry dry就等于true
那if dry这边是不是就变成if true
If true就if对的
if对的那我们就会进印这个烘衣
所以我们现在这个wash true 应该会多印这一行烘衣
⚠️要在括号里写True而不是dry 不然会出现错误
wash(True) # 使用function
而不是
wash(dry) # 使用function
错误的话会显示:
(base) liuruideMacBook-Pro:desktop liurui$ python3 func.py
Traceback (most recent call last):
File "func.py", line 13, in <module>
wash(dry) # 使用function
NameError: name 'dry' is not defined
执行
(base) liuruideMacBook-Pro:desktop liurui$ python3 func.py
加水
加洗衣液
旋转
烘衣
hi!
(base) liuruideMacBook-Pro:desktop liurui$
多印了这个烘衣
原本没有的
那有时候我使用这个洗衣机的时候呢 我可以不要投true阿
譬如说我投false不对的 那这样他就不会烘衣麻
我连续执行两次洗衣服 第一次是true要烘衣 第二次是不要烘衣false
再执行
(base) liuruideMacBook-Pro:desktop liurui$ python3 func.py
加水
加洗衣液
旋转
烘衣
加水
加洗衣液
旋转
(base) liuruideMacBook-Pro:desktop liurui$
第一次有烘衣 第二次没有烘衣
参数parameter到底是干嘛的?
我们设计了一个参数在这里 名称叫做dry
那我可以投东西进去 我喜欢把参数形容成投币孔
我们把true投进去 所以dry就等于true了
第二次的时候 False投进去 dry就等于false了
补充说明
为什么我们要有这种参数投币孔
为什么我们不直接把这个dry写在外面就好了
Dry等于true
那我这边一样可以if dry阿
我为什么这边要设计参数
简单来讲 就是不好
如果你这个function内容裡面 有使用到function外的东西 这样不好
形容成饮料的自动贩卖机 有一个投币孔 可以投钱进去 投五元拉 十元拉 这个就是我们的参数
上图黄框就是我们要投东西进去机器的内部 机器裡面有很多零件 这就是我们的function内部
如果我们的function内部 会使用到外头世界的东西 机器外面的东西这样不好
自动贩卖机哪可以伸手出去拿外面的东西 外面的零件 不可以
不是绝对不行 大原则来说不好
所以呢如果我们今天想要传东西进去 就要设计投币孔
那我们就要在这个wash这边 加上一个参数 也就是我说的投币孔 那我们才可以把东西投进去
像我现在把true投进去dry
False投进去dry Dry就变false了
1、当function需要外部资料的时候,我们就设计投币孔(参数),把资料投进去function里。
(因为让function伸手出去外面拿东西不好)
相加的例子
一个新的function 这个function叫做add加
那现在有两个参数
(参数不一定只有一个 可以有很多个 用逗点分开就好了 只要有逗点就最好要配空格)
x逗点空格y
既然function叫做add加 我们就印出x加y
def add(x, y):
print(x + y)
这个function长这样 他有两个投币孔 x跟y
那我在执行他的时候 我就投两个东西给他
如果你有投币孔 你就一定要投东西给他
2、如果function有投币孔就一定要投东西(除非有预设值)
def add(x, y):
print(x + y)
add(3, 4)
add(123, 2323)
譬如说我现在投3跟4 加起来会是多少
执行 7
再执行一次 123加2323等于2446
(base) liuruideMacBook-Pro:desktop liurui$ python3 func.py
加水
加洗衣液
旋转
烘衣
加水
加洗衣液
旋转
7
2446
(base) liuruideMacBook-Pro:desktop liurui$
3、投东西的时候自动是按照参数的顺序。
3他就自动投到x
4就自动投到y阿
依照顺序
x就等于3 y就等于4 x这个变数的值变成4 y这个变数的值变成3
预设值
特殊情况:
就是我们现在这个function有两个参数麻 两个投币孔麻
我们使用的时候 就一定要给两个东西 不投不行啊 他没办法运作他会当掉
他说这个机器有两个投币孔耶 你怎么才给一个 或是你怎么给三个 他会疯掉喔
一个比较特殊的情况
参数可以有预设值
举例
都用预设值
def add(x=0, y=1):
print(x + y)
add()
写参数的时候,等号左右不用空格
x这边写等于0 Y这边写等于1 就是我这个x的预设值变成0了
我在使用function的时候 不见得要投东西给他 可以不投
结果:
加水
加洗衣液
旋转
烘衣
加水
加洗衣液
旋转
1
你如果没投东西给他的时候 他就自动用预设值阿
def add(x=0, y=1):
print(x + y)
add(5)
按顺序第一个用预设值
如果你有预设值的时候呢 我可不可以只投一个 也可以
譬如说我现在投5
欸那糟糕 那我现在只投一个话 我怎么知道这个5是投给x 还是投给y对不对
依照顺序
我猜这个5投给x好了 y用预设值
x不要再用预设值了 用5 因为我现在有投
那y没有投我就用预设值
结果:
加水
加洗衣液
旋转
烘衣
加水
加洗衣液
旋转
6
强制后面的参数用预设值
def add(x=0, y=1):
print(x + y)
add(y=5)
那你如果要强迫投给y
括号里写y等于5 意思就是说 我明确的要把5投给y这个参数
这种偶尔会看到拉 你只要现在看过说 原来可以这样写就好了
简单来说这边重点就是 参数可以有预设值
如果要投东西给参数的时候 你甚至可以强调 你要传到哪一个参数去
洗衣案例
def wash(dry=False, water=8):
print('加水', water,'分满')
print('加洗衣液')
print('旋转')
if dry:
print('烘衣')
wash() # 使用function
结果:
加水 8 分满
加洗衣液
旋转
如果没有特别去微调这个洗衣机的话 主动来讲他是不会去烘衣服的 我们把他预设值变成false
有投币孔 好像一定要投东西 但因为他有预设值 所以我们就不用投东西
Ok
再给他一个新的参数叫水位 你如果不调整水位的话 我们预设值就用8分满
两个参数 一个叫dry一个叫water 他们两个都有预设值
使用function的时候 如果都没有投东西进去投币孔 就都用预设值麻
def wash(dry=False, water=8):
print('加水', water,'分满')
print('加洗衣液')
print('旋转')
if dry:
print('烘衣')
wash(water=10) # 使用function
那假设我现在想要加水10分满好了
那我就写water等于10 把10投进water 所以10就会被这个代币就会被投到water这个投币孔
那因为dry我没有写麻 所以就不管他就用预设值
结果:
加水 10 分满
加洗衣液
旋转