30天学会Python: Day 9- 程序码也能取名字

自订函式(User Definded Function)

自己定义函式有几个优点:

  1. 增加程序码的可读性:
    程序码相当复杂时,常常要花上很多时间阅读,才能了解它的意义和作用
    定义函式就像是帮一段程序码取一个新名字,当其他人(或日後的自己)阅读这段程序码时,只要看到这段程序码的名字就能大概知道它的功能
  2. 缩短程序码:
    当某一段相同的程序码在程序中重复出现,可以把这段程序码写成自订函式,在把用到这段程序码的地方替换成函式的名称就可以让程序码更简短
  3. 模组化:
    当程序码非常庞大时,如果将不同功能的程序码,划分成不同的函式,在开发以及维护上会更加便利
    可以把一个程序想成是一台电脑,善用自订函式的程序码就像是零件可以自由拆装的桌上型电脑,只要零件和零件之间的接头固定,不同的零件可以同时由不同的人开发和维护,也可以分开升级,最後组装在一起就能使用
    全部写在一起的程序码就像是一台把所有零件焊接在一起的平板电脑,牵一发动全身,开发和维护都会困难很多

语法

def <函式名称>():
	<函式定义>
	    ⋮
	<函式定义>

函式执行的内容是 def <函式名称>(): 之後有缩排的内容

下面例子中,如果输入的数不是偶数会呼叫 showErrorMessage()

def showErrorMessage():
	print('Invalid input!')

x=int(input())
if x%2==0:
	print('OK')
else:
	showErrorMessage()

资料传递

函式的参数要写在小括号 () 中,如果有多个参数要用逗号 , 分隔

参数在函式中可以像是变数一样使用

def add(x, y):
	print(x+y)

a=int(input())
b=int(input())
add(a, b)

函式外的变数和函式的参数可以有一样的名字,两者独立互不影响

def add(x, y):
	x=x+y
	print(x)

x=int(input())
y=int(input())
add(x, y)
print(x, y)

虽然 add()x 设为 x+y,但最後显示的 x 并没有变动,可以确定函式外的 x 和函式的 x 是不同的资料

回传数值

return 回传数值,被回传的可以是变数、运算、数值或是另一个函式的结果
return 同时也代表结束函式,只要执行到 return,不管後面还有没有内容,函式都会结束

def add(x, y):
	s=x+y
	return s

print(add(1, 5))

函式 fun() 会在 data 的长度是偶数时回传 data 中每个元的总合,奇数时回传自订函式 f()

def f(data):
	result=1
	for num in data:
		result*=num
	return result

def fun(data):
	if len(data)%2==0:
		return sum(data)
	else:
		return f(data)

l=[1, 2, 5]
print(f(l))
l=[1, 2, 3, 4]
print(f(l))

可以用容器一次回传多个值

def pow(data, e):
	for i in range(len(data)):
		data[i]**=e
	return data

nums=[1, 2, 5, 7, 9]
print(pow(nums, 2))

指定参数型别

Python 中的参数可以不指定型别

def show(contain):
    print('This is', contain, '!!!')

如果要限制参数的型别,可以在参数後面加上 :<型别>

def f(x: int):
	return 8*x+7

print(f(4))

指定回传型别

如果要标示函式回传的型别,可以在小括号 () 之後加上 -><型别>

def f(x: int)->int:
	return 8*x+7

print(f(4))

函式的变数

在 Python 中,不属於任何函式的变数(全域变数),可以被其他函式使用
但是函式中的变数,就只能被同个函数使用

def f(x):
    return 8*x+7

def g():
    n=m+7
    return f(n) 

m=3
print(g())

倒数第二行的 m 不属於任何函数,所以 g() 可以使用它的值
因为 n 是在 g() 里面建立的变数,所以其他地方无法使用这个 n,如果 g() 之外如果还有叫做 n 的变数,则那个 ng() 里面的 n 是不一样的变数

函式中不能直接指派函式外的变数

def fun():
	x=10
	print(x)

x=2
fun()
print(x)

虽然在 fun() 中指派 x 为10,但最後一行 print() 显示2,代表 fun() 中的 xfun() 外的 x 是不同的变数

函式定义的顺序

Python 没有规定自订函式一定要在程序码的开头,只要在被呼叫前定义就可以了
但函式的定义和程序执行的内容没有规定的顺序

函式必须在被呼叫前定义,所以 def fun() 这段可以放到倒数第二行前的任一行

x=10
y=100

def fun(a, b):
	return a**b

z=fun(x, y)
print(z)

<<:  Day 10 - 安装 FRRouting

>>:  Day 10 - Algebraic structure

Consistency and Consensus (3-3) - Total Order Broadcast

[Day 19] Consistency and Consensus (3-3) - Total O...

番外:用Excel做资料处理的碎碎念

目前工作上大部分都是用excel在做资料上的处理。以前虽然也有用过excel做过分析,单都仅限於少量...

延伸(2)-ML到底要不要念统计 | ML#Day30

就这半年以来的经验,会觉得是需要。 既然资料是关键的部分,那麽判读资料的组成和分布,运用上统计的知识...

Day27 Apex 配对机制分析

Apex 为一款笔者近期最喜欢的竞技游戏,想藉着分析的名义,趁机推广一下这款大逃杀游戏。由於此游戏一...

Flutter基础介绍与实作-Day27 旅游笔记的实作(8)

今天要做的是区域的部分,重点的话之前就说过了就不再重复了,今天做两个区域北部和中部,那就赶快开始吧!...