[TOC]
### 课前准确:
* 在`Windows`系统里安装`python`,参考 [安装python](https://www.kancloud.cn/k12edu/k_12/785427#Windowspython_4)
*****
### 本节课参考资料
* `Teach Your Kids to Code.pdf` 第七章:函数
* `python:从入门到实践.pdf` 第八章:函数
* [W3schools:python_functions](https://www.w3schools.com/python/python_functions.asp)
* [python_lambda](https://blog.csdn.net/zjuxsl/article/details/79437563)
*****
### 如何定义一个函数
无参函数:
```
def my_function():
print("你好,我是一个无参函数!")
```
有参函数:
```
def my_function(fname):
print("很高兴认识你,"+fname)
my_function("JiaMing")
my_function("Ben")
my_function("LiMing")
```
上面这段代码也可以改成`for`循环:
```
def my_function(fname):
print("很高兴认识你,"+fname)
names = ["JiaMing","Ben","LiMing"]
for fname in names:
my_function(fname)
```
带默认值的有参函数:
```
def my_function(country = "挪威"):
print("我来自" + country)
my_function("瑞典")
my_function("印度")
my_function()
my_function("巴西")
```
函数可以用来计算:
```
def my_function(x):
return 5 * x
print(my_function(3))
print(my_function(5))
print(my_function(9))
```
### 一种特殊的函数:`lambda`函数
* `lambda`函数是匿名函数
* `lambda`函数有输入和输出
* `lambda`函数的功能比较简单
下面三段代码分别传入了一个、两个、三个参数、任意数量的参数:
```
x = lambda a : a + 10
print(x(5))
```
```
x = lambda a, b : a * b
print(x(5, 6))
```
```
x = lambda a, b, c : a + b + c
print(x(5, 6, 2))
```
使用` *args` 表示任意个参数
```
y = lambda *args : sum(args)
print(y(5, 6, 2))
```
当在另一个函数中使用`lambda`函数时,`lambda`函数的功能将得到更好的显示。假设您有一个函数定义,它接受一个参数,并且该参数将被乘以一个未知数:
```
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
print(mydoubler(11))
```
想一想,哪个参数是`n`,哪个是`a`?
```
def myfunc(n):
return lambda a : a / n
mydoubler = myfunc(0)
mytripler = myfunc(10)
print(mydoubler(20))
print(mytripler(20))
```
```
# chapter7_1.py
def get_formatted_name(first_name, last_name):
"""返回整洁的姓名"""
full_name = first_name + last_name
return full_name.title()
while True:
print("\n你叫什么名字:")
print("如果你不想告诉我,请按 'q'。")
f_name = input("你的姓: ")
if f_name == 'q':
break
l_name = input("你的名:")
if l_name == 'q':
break
formatted_name = get_formatted_name(f_name, l_name)
print("\n你好啊, " + formatted_name + "!")
```
### 做一个练习
```
# chapter7_2.py
import random
import turtle
t = turtle.Pen()
t.speed(0)
turtle.bgcolor("black")
colors = ["red", "yellow", "blue", "green", "orange", "purple",
"white", "gray"]
# 定义函数 random_spiral
def random_spiral():
t.pencolor(random.choice(colors))
size = random.randint(10,40)
x = random.randrange(-turtle.window_width()//2,
turtle.window_width()//2)
y = random.randrange(-turtle.window_height()//2,
turtle.window_height()//2)
t.penup()
t.setpos(x,y)
t.pendown()
for m in range(size):
t.forward(m*2)
t.left(91)
for n in range(50):
random_spiral()
```
### 课程小结
1. 有参数、无参数函数
2. `lambda`函数
3. 如何表达任意个参数