购物车小程序

#!/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