文章目录
函数入门知识导图
一、函数的创建和调用
- 函数调用示意图
函数必须有输入(参数)和输出(返回值)
定义函数
def get_max(num1, num2):
result = num1 if num1 > num2 else num2
return result
调用函数
max_num = get_max(30, 80)
print(max_num)
二、函数中变量的作用域
1.全局变量: 全局生效的变量。函数外面的变量。
name = 'admin'
def login():
print(name)
login()
2.局部变量: 局部生效的变量。函数内部的变量。
def logout():
age = 19
print(age)
logout()
# print(age)
3.函数内部修改全局变量.
def hello():
global money
money += 1
users.append('user1')
print(money, users)
money = 100 # 不可变数据类型
users = [] # 可变数据类型
hello()
"""
1). money是全局变量
2). 如果要在函数中修改全局的变量,不能直接修改, 需要用global关键字声明修改的变量是全局变量。
3). 不可变数据类型修改全局变量一定要global声明, 可变数据类型不需要。
"""
三、函数的参数传递
参数检查:isinstance(var, int)判断变量var是否为int
def get_max(num1: int, num2: int) -> int:
"""
求两数的最大值
:param num1: 整型数1
:param num2: 整型数2
:return: 最大值
"""
if isinstance(num1, int) and isinstance(num2, int):
return num1 if num1 > num2 else num2
else:
return 0
result = get_max(20, 30)
print(result)
print(help(get_max)) # 查看函数中的注释
四、常见的四类形参
1.必选参数:必须要传递的参数
def get_max(num1: int, num2: int) -> int:
return num1 if num1 > num2 else num2
result = get_max(20, 30)
print(result)
2.默认参数:可传可不传的参数
def pow(x, y=2):
return x ** y
result = pow(3) # x=3, y=2, result=9
print(result)
result = pow(2, 4) # x=2,y=4, result=2**4=8
print(result)
3.可变参数: 参数的个数会变化,可以传0,1,2,3,…n
# args是元组
# args=arguments
def my_sum(*args):
return sum(args)
result = my_sum(4, 5, 6) # 15
print(result)
4.关键字参数:可以传递key和value
# kwargs存储在字典中
def enroll(name, age=18, **kwargs):
print(f"""
入学信息
1. 姓名:{name}
2. 年龄:{age}
3. 其他:{kwargs}
""")
enroll('张三', country='china', english='GRE', sports=['篮球', '羽毛球'])
from collections import namedtuple # 从某个模块中导入某个功能
五、匿名函数
匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,lambda函数能接收任何数量的参数但只能返回一个表达式的值。
# 求最大值函数
# def get_max(num1: int, num2: int) -> int:
# return num1 if num1 > num2 else num2
get_max = lambda num1, num2: num1 if num1 > num2 else num2
print(get_max(10, 20))
# 指数函数
# def pow(x, y=2):
# return x ** y
pow = lambda x, y=2: x ** y
print(pow(4))
print(pow(2, 3))
<排序>
# 需求: 将所有的偶数排前面,所有的奇数排后面。
nums = [0, 7, 0, 2]
nums.sort(key=lambda num: 0 if num % 2 == 0 else 1)
print(nums)
六、递归函数
- 原理图
# 需求: 求n的阶乘。 n!=n*(n-1)*(n-2)*......1
方法1: for循环
res = 1
n = 3 # 3!=3*2*1=1*2*3=6
for i in range(1,n+1):
res = res * i # res=1*1*2*3
print(res)
方法2: 递归
def f(n):
"""计算阶乘"""
if n == 1:
return 1
return n * f(n - 1)
print(f(5))
<递归函数实现斐波那契数列>
def fib(n):
"""斐波那契数列""" # 1, 1, 2, 3, 5, 8
if n == 1 or n == 2:
return 1
return fib(n - 1) + fib(n - 2)
print(fib(5))
七、文件的基本操作
1.打开文件
mode:
r: 只能读文件
w: 只能写入(清空文件内容)
a+: 读写(文件追加写入内容)
f = open('doc/hello.txt', mode='a+')
2.文件读写操作
f.write('java\n')
3.关闭文件
f.close()
八、with语句
在with语句中,打开文件执行完之后操作之后会自动关闭文件。
with open('doc/test.txt', 'w+') as f:
f.write('hello world\n') # 写入文件
f.seek(0, 0) # ****: 移动指针到文件最开始
print("当前指针的位置:", f.tell())
f.seek(0, 2) # 移动指针到文件末尾
print("当前指针的位置:", f.tell())
print(f.read()) # 读取文件内容
九、os模块
import os
import platform
# 1. 获取操作系统类型
print(os.name)
# 2. 获取主机信息,windows系统使用platform模块, 如果是Linux系统使用os模块
"""
try: 可能出现报错的代码
excpt: 如果出现异常,执行的内容
finally:是否有异常,都会执行的内容
"""
try:
uname = os.uname()
except Exception:
uname = platform.uname()
finally:
print(uname)
# 3.获取系统的环境变量
envs = os.environ
# os.environ.get('PASSWORD')
print(envs)
# 4. 目录名和文件名拼接
# os.path.dirname获取某个文件对应的目录名
# __file__当前文件
# join拼接, 将目录名和文件名拼接起来。
BASE_DIR = os.path.dirname(__file__)
setting_file = os.path.join(BASE_DIR, 'dev.conf')
print(setting_file)
十、json模块
import json # 导入json模块
# 1. 将python对象编码成json字符串
users = {'name': 'westos', "age": 18, 'city': '西安'}
json_str = json.dumps(users)
with open('doc/hello.json', 'w') as f:
# ensure_ascii=False:中文可以成功存储
# indent=4: 缩进为4个空格
json.dump(users, f, ensure_ascii=False, indent=4)
print("存储成功")
print(json_str, type(json_str))
# 2. 将json字符串解码成python对象
with open('doc/hello.json') as f:
python_obj = json.load(f)
print(python_obj, type(python_obj))
十一、存储为excel文件
import pandas # 导入pandas模块
# 存入字典
hosts = [
{'host': '1.1.1.1', 'hostname': 'test1', 'idc': 'ali'},
{'host': '1.1.1.2', 'hostname': 'test2', 'idc': 'ali'},
{'host': '1.1.1.3', 'hostname': 'test3', 'idc': 'huawei'},
{'host': '1.1.1.4', 'hostname': 'test4', 'idc': 'ali'}
]
# 1. 转换数据类型
df = pandas.DataFrame(hosts)
# print(df)
# 2. 存储到excel文件中
df.to_excel('doc/hosts.xlsx')
print('success')
<结果>