Learn Python with Steem #06 笔记
[toc]
划重点
- 函数
函数是实现某个特定功能的一段代码。
将同一类相对独立的功能写成一个个函数,放到同一个py文件里,这就是一个模块。
你可以试试输入 help(math) 看是不是这样的。
- 函数的结构
函数由输入参数、函数体、输出参数组成。
通过输入参数接收要处理的数据,
在函数体里实现要完成的功能,
最后将计算结果通过输出参数返回给使用者。
编程练习
# 作业
def my_average(data):
average = (sum(data) - max(data) - min(data)) / (len(data) - 2)
return average
my_list = [1, 8, 3, 6, 2, 345, -23, 7]
answer = my_average(my_list)
print(answer)
4.5
# 将计算busy机器人点赞比例的功能写成一个函数
import requests
def busy_vote_percent(username):
minVests = 20000000
# maxVests = 4000000000000 # maxVests 不是这个值
maxVests = 5000000000000
limitVests = 10000000000000
minPercent = 6 / 100
maxPercent = 2500 / 100
url = 'https://steemdb.com/api/accounts?account=' + username
response = requests.get(url)
data = response.json()[0]
followers_mvest = data.get('followers_mvest')
if followers_mvest < minVests or followers_mvest > limitVests:
percent = 0
else:
percent = (10000 / maxVests) * followers_mvest
# print(percent)
percent = min(max(percent, minPercent), maxPercent) / 100
print('Hi,{}\nfollowers_mvest:{}\nyour busy vote percent is: {:.2%}\n'.
format(username, followers_mvest, percent))
# return percent
busy_vote_percent('yjcps')
busy_vote_percent('dapeng')
busy_vote_percent('shine.wong')
busy_vote_percent('deanliu')
Hi,yjcps
followers_mvest:93266616.60498305
your busy vote percent is: 0.19%
Hi,dapeng
followers_mvest:1856251363.8415272
your busy vote percent is: 3.71%
Hi,shine.wong
followers_mvest:261131007.75513688
your busy vote percent is: 0.52%
Hi,deanliu
followers_mvest:18379826592.987816
your busy vote percent is: 25.00%
补充
变量的作用域
变量的作用域指的是变量的可见范围,分两类:
全局变量
局部变量
# 全局变量
a = 20
b = 30
c = 5
def my_fun():
# 局部变量
a = 7
b = 10
print('call my_fun:a={}, b={}, c={}'.format(a, b, c))
# 在函数里面有定义a,b变量属于局部变量,
# 在使用的时候优先使用局部变量,
# 看不见函数外面的全局变量
# 函数里面没有定义c变量
# 使用的时候会去查找外面的全局变量
my_fun()
print('a={}, b={}, c={}'.format(a, b, c))
# 在外面看不见函数里面的局部变量
call my_fun:a=7, b=10, c=5
a=20, b=30, c=5
# 全局变量
a = 20
b = 30
c = 5
def my_fun():
# 局部变量
a = 7
# 可以用global声明b是函数外面的全局变量
global b
b = 10
print('call my_fun:a={}, b={}, c={}'.format(a, b, c))
my_fun()
print('a={}, b={}, c={}'.format(a, b, c))
# 在函数外面可以看到变量b被修改了
call my_fun:a=7, b=10, c=5
a=20, b=10, c=5
匿名函数
Python中用lambda定义匿名函数
格式: lambda 参数:表达式
f = lambda x: x * 2 + x + 2
## 等价f(x)
# def f(x):
# return x * 2 + x + 2
print(f(2))
print(f(5))
8
17
递归函数
在函数里面调用函数自己本身来解决问题,这就是递归。
在遇到一些定义,数据结构或问题的解决方法是递归的时候,可以考虑使用递归函数。
# 经典例子:计算n的阶乘n!
def factorial(n):
# 递归出口
if n == 0:
return 1
# 递归体
return n * factorial(n - 1)
print(factorial(4))
print(factorial(9))
24
362880
装饰器
在Python中可以用装饰器来修饰函数。
使用装饰器的目的在于:为原有函数添加新的功能但不修改原来的程序。
# 定义一个装饰器
def print_fun_name(func):
def wrapper(*args, **kw):
print('-----------------')
print('call function:{}'.format(func.__name__))
print('-----------------')
return func(*args, **kw)
return wrapper
# 使用装饰器
@print_fun_name
def say_hello(name):
print('Hello', name)
@print_fun_name
def say_bye(name):
print('Bye', name)
say_hello('yjcps')
say_bye('hacper')
-----------------
call function:say_hello
-----------------
Hello yjcps
-----------------
call function:say_bye
-----------------
Bye hacper