购物车小程序
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def show_shopping_car():
saving = 1000000
shopping_car = {
('Mac',9000),
('kindle',800),
('tesla',100000),
('Python book',105),
}
print('您已经购买的商品如下'.center(50,'*'))
for i, v in enumerate(shopping_car, 1):
print('\033[35;1m %s: %s \033[0m' % (i,v))
expense = 0
for i in shopping_car:
expense += i[1]
print('\n\033[32;1m您的余额为 %s \033[0m' % (saving - expense))
show_shopping_car()
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
********************您已经购买的商品如下********************
1: ('Python book', 105)
2: ('kindle', 800)
3: ('Mac', 9000)
4: ('tesla', 100000)
您的余额为 890095
Process finished with exit code 0
函数 != function()
计算机函数 == subroutine 子程序,procedures 过程
作用:
1.减少重复代码
2.方便修改,更易扩展
3.保持代码一致性
伪代码如下:
def logger(log_text):
f = open("log.txt", 'a', encoding='utf-8')
f.write("2016-08-25 15:24 %s % log_text")
f.close()
print("log_text")
print("----function 1")
logger("2016-08-25 15:24 exec function 1")
print("----function 2")
logger("2016-08-25 15:24 exec function 2")
print("----function 3")
logger("2016-08-25 15:24 exec function 3")
函数是什么?
函数一词来源于数学,但编程中的函数概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同叫法,在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function。在C中只有function,在Java里面叫做method.
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用函数名即可
特性:
1、代码重用
2、保持一致性
3、可扩展性
函数的创建
格式
Python定义函数使用def关键字,一般格式如下:
def 函数名(参数列表):
函数体<br><br>
def hello():
print('hello')
hello() #调用
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def f():
print('ok')
f() #调用一定记得加括号
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
ok
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def f():
print('ok')
f()
f()
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
ok
ok
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def f():
print('ok')
print(f)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
<function f at 0x7f55f3984280>
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def f():
print('ok')
f
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
Process finished with exit code 0
函数名的命名规则:
函数名必须以下划线或字母开头,可以包含任意字母、数字或者下划线的组合。
不能使用任何的标点符号;
函数名是区分大小写的;
函数名不能是保留字。
形参和实参
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参数,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)
实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参
def f(x):
print(x)
f(3)
区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(x,y): #形参,不传值不占内存;
print(x + y)
add()
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
Traceback (most recent call last):
File "/home/smoke/PycharmProjects/pythonProject/lean_python/function.py", line 8, in <module>
add()
TypeError: add() missing 2 required positional arguments: 'x' and 'y'
Process finished with exit code 1
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(a,b):
print(a + b)
add(3,5) #实参,实际的参数
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
8
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(a,b):
print(a + b)
add(7,5)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
12
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(a,b):
print(a + b)
add(7,5)
add(5,8)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
12
13
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def f():
print('function 2')
f()
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
function 2
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def f(index):
print('function %s' %index)
f(3)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
function 3
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def f(index):
print('function %s' %index)
f(5)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
function 5
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(a,b): #按顺序分配实参
print(a)
print(b)
add(7,5)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
7
5
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(b,a):
print(a)
print(b)
add(7,5)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
5
7
Process finished with exit code 0
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(a):
print(a)
print(b)
add(7,5)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
Traceback (most recent call last):
File "/home/smoke/PycharmProjects/pythonProject/lean_python/function.py", line 9, in <module>
add(7,5)
TypeError: add() takes 1 positional argument but 2 were given
Process finished with exit code 1
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def add(a):
print(a)
add(7,5)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
Traceback (most recent call last):
File "/home/smoke/PycharmProjects/pythonProject/lean_python/function.py", line 9, in <module>
add(7,5)
TypeError: add() takes 1 positional argument but 2 were given
Process finished with exit code 1
实例
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def action1(n):
print ('starting action1...')
with open('日志记录','a') as f:
f.write('end action%s\n'%n)
def action2(n):
print('starting action2...')
with open('日志记录','a') as f:
f.write('end action%s\n'%n)
def action3(n):
print('starting action3...')
with open('日志记录','a') as f:
f.write('end action%s\n'%n)
action1(1)
action2(2)
action3(3)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
starting action1...
starting action2...
starting action3...
Process finished with exit code 0
查看日志记录文件
smoke@smoke-GS70-2PC-Stealth:~/PycharmProjects/pythonProject/lean_python$ cat 日志记录 end action1 end action2 end action3
清空日志记录文件
smoke@smoke-GS70-2PC-Stealth:~/PycharmProjects/pythonProject/lean_python$ echo -n '' > 日志记录
修改脚本
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def action(n):
print ('starting action%s...'%n)
with open('日志记录','a') as f:
f.write('end action%s\n'%n)
action(1)
action(2)
action(3)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
starting action1...
starting action2...
starting action3...
Process finished with exit code 0
查看日志记录文件
smoke@smoke-GS70-2PC-Stealth:~/PycharmProjects/pythonProject/lean_python$ cat 日志记录 end action1 end action2 end action3
清空日志记录
smoke@smoke-GS70-2PC-Stealth:~/PycharmProjects/pythonProject/lean_python$ echo -n '' > 日志记录
修改脚本
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
def logger(n):
with open('日志记录','a') as f:
f.write('end action%s\n'%n)
def action1(n):
print ('starting action1...')
logger(n) #在函数里面调用函数,参数可以继承父函数
def action2(n):
print('starting action2...')
logger(n)
def action3(n):
print('starting action3...')
logger(n)
action1(11)
action2(22)
action3(33)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
starting action1...
starting action2...
starting action3...
Process finished with exit code 0
查看日志记录文件
smoke@smoke-GS70-2PC-Stealth:~/PycharmProjects/pythonProject/lean_python$ cat 日志记录 end action11 end action22 end action33
清空日志记录
smoke@smoke-GS70-2PC-Stealth:~/PycharmProjects/pythonProject/lean_python$ echo -n '' > 日志记录
修改脚本
#!/usr/bin/env python3.8
# __author: "smoke"
# date: 2020/12/29 下午10:20
import time #导入时间模块
def logger(n):
time_format = '%Y-%m-%d %X' #定义时间格式
time_current = time.strftime(time_format)
with open('日志记录','a') as f:
f.write('%s end action%s\n'%(time_current,n))
def action1(n):
print ('starting action1...')
logger(n) #在函数里面调用函数,参数可以继承父函数
def action2(n):
print('starting action2...')
logger(n)
def action3(n):
print('starting action3...')
logger(n)
action1(11)
action2(22)
action3(33)
/home/smoke/PycharmProjects/pythonProject/venv/bin/python /home/smoke/PycharmProjects/pythonProject/lean_python/function.py
starting action1...
starting action2...
starting action3...
Process finished with exit code 0
查看日志记录文件
smoke@smoke-GS70-2PC-Stealth:~/PycharmProjects/pythonProject/lean_python$ cat 日志记录 2021-01-03 22:42:43 end action11 2021-01-03 22:42:43 end action22 2021-01-03 22:42:43 end action33
浙公网安备 33010602011771号