- 函数
- 一、格式
- 二、参数
- 形参、实参
- 默认参数
- 关键参数(指定参数)
- 非固定参数
- 局部变量&全局变量
- 函数传字典、列表的特殊现象
- 三、常用内置函数
- 模块
- 模块导入
- 自定义模块
- 第三方开源模块
- 包
- 常用模块
- os模块
- sys模块
- time模块
- datetime模块
- random模块
def sayhi(): #函数名
print('hello,world')
sayhi() #调用
def sayhi(x,y): #函数名
print(f'{x}hello,{y}world')
sayhi(x,y) #调用
二、参数
形参、实参
默认参数
默认参数放在形参的最后,调用函数未指定时使用默认参数,指定时使用指定的值
def hhh(x, y, z, w = 5) print(x+y+z+w) hhh(1,2,3) hhh(1,2,3,4)关键参数(指定参数)
调用函数时按位置顺序传入的参数叫位置参数
如果调用函数传参时指定的参数名,则叫指定参数、即关键参数
指定参数必须放在位置参数后面
def hhh(x, y, z, w) print(x+y+z+w) hhh(1,2,w=3,z=5) # 指定参数非固定参数
当不知道用户会传进来多少参数时,定义非固定参数解决用户传参过多报错的问题
用*args保存多输的实参,以元组形式保存
def stu_data(name, age, gender, *args): # 多输的参数会在args中以元组形式保存
print(name, age, gender, *args, args)
stu_data('小明', 12, 'M', '河南', '中国')
>>>小明 12 M 河南 中国 ('河南', '中国')
用**kwargs保存多输的实参,以字典形式保存
def stu_data(name, age, gender, **kwargs): # 多输的参数会在**kwargs中以字典形式保存
print(name, age, gender, kwargs,)
stu_data('小明', 12, 'M', province='河南', 国籍='中国')
>>>小明 12 M {'province': '河南', '国籍': '中国'}
局部变量&全局变量
函数传字典、列表的特殊现象1、函数外声明为全局变量,函数内声明为局部变量
2、函数内查找顺序先局部后全局,没有局部时默认使用全局。
3、函数内更改局部变量不能改变全局变量
4、函数内可以使用 global 变量名 来声明全局变量
三、常用内置函数可在函数中改变外部传入的字典与列表
以上均为Python内置函数,具体见官网
简单介绍几个常用的:
- abs() 求绝对值
- all() 对列表中每个元素进行bool()判断,全为真才返回true
- any() 对列表中每个元素进行bool()判断,任一为true,返回true
- ascii #Return an ASCII-only representation of an object,ascii(“中国”) 返回”‘u4e2du56fd’”
- bin #返回整数的2进制格式
- bool() 判断⼀个数据结构是True or False, bool({}) 返回就是False, 因为是空dict
- bytearray # 把byte变成 bytearray, 可修改的数组
- bytes # bytes(“中国”,”gbk”)
- callable # 判断⼀个对象是否可调⽤
- chr()返回⼀个数字对应的ascii字符 , 比如chr(90)返回ascii⾥的’Z’
- classmethod #⾯向对象时⽤,现在忽略
- compile #py解释器⾃⼰⽤的东⻄,忽略
- complex #求复数,⼀般⼈⽤不到
- copyright #没⽤
- credits #没⽤
- delattr #⾯向对象时⽤,现在忽略
- dict()生成⼀个空字典
- dir() 返回当前程序所有的变量名
- divmod #返回除法的商和余数 ,⽐如divmod(4,2),结果(2, 0)
- enumerate返回列表的索引和元素,比如 d = [“alex”,”jack”],enumerate(d)后,得到(0, ‘alex’)
(1, ‘jack’) - eval #可以把字符串形式的list,dict,set,tuple,再转换成其原有的数据类型。
- exec #把字符串格式的代码,进⾏解义并执⾏,⽐如exec(“print(‘hellworld’)”),会解义⾥⾯的字符
串并执⾏ - exit 退出程序
- filter(函数名,列表) #对list、dict、set、tuple等可迭代对象进行过滤,将列表中每项元素带入函数中,若为真保留
- float()转成浮点
- format #没⽤
- frozenset #把⼀个集合变成不可修改的
- getattr #⾯向对象时⽤,现在忽略
- globals #打印全局作⽤域⾥的值
- hasattr #⾯向对象时⽤,现在忽略
- hash #hash函数
- help()
- hex #返回⼀个10进制的16进制表示形式,hex(10) 返回’0xa’
- id()查看对象内存地址
- input()
- int()
- isinstance #判断⼀个数据结构的类型,⽐如判断a是不是fronzenset, isinstance(a,frozenset) 返
回 True or False - issubclass #⾯向对象时⽤,现在忽略
- iter #把⼀个数据结构变成迭代器,讲了迭代器就明⽩了
- len()返回长度
- list()创建一个列表
- locals()以键值对形式打印当前程序中所有变量名和变量值
- map(函数名不加括号,可循环列表等)
l = list(range(10))
def cacl(x):
return x**2
m = map(cacl, l) # 函数名后不加括号,只丢给cacl但并不执行
for i in m: # 遍历时开始执行
print(i, end=',')
- max() 求最大值
- memoryview # ⼀般⼈不⽤,忽略
- min()求最⼩值
- next # ⽣成器会⽤到,现在忽略
- object #⾯向对象时⽤,现在忽略
- oct # 返回10进制数的8进制表示
- open
- ord()返回字符对应的ascii码值
- property #⾯向对象时⽤,现在忽略
- quit
- range
- repr #没什么⽤
- reversed # 可以把⼀个列表反转
- round()可以把小数4舍5⼊成整数 ,round(10.15,1) 得10.2
- set
- setattr #⾯向对象时⽤,现在忽略
- slice # 没⽤
- sorted
- staticmethod #⾯向对象时⽤,现在忽略
- str()变为字符串
- sum() 求和,a=[1, 4, 9, 1849, 2025, 25, 36],sum(a) 得3949
- super #⾯向对象时⽤,现在忽略
- tuple
- type
- vars #返回⼀个对象的属性,⾯向对象时就明⽩了
- zip()配对
a = [1,2,3]
b = ['a','b','c','d']
for i in zip(a,b):
print(i)
>>>(1, 'a')
(2, 'b')
(3, 'c')
模块
模块导入
import module_a #导⼊ from module import xx # 导⼊某个模块下的某个⽅法 or ⼦模块 from module.xx.xx import xx as rename #导⼊后⼀个⽅法后重命令 from module.xx.xx import * #导⼊⼀个模块下的所有⽅法,不建议使⽤自定义模块
调用自定义模块时一定要在同级目录下,否则需要用sys模块导入自定义模块路径
调用模块会自动运行模块中的程序
"""所需模块名为first_module,路径为D:\programming\python\learnPython\路飞学城8天集训营\test_module\test_module.py"""
"""当前文件路径为D:\programming\python\learnPython\路飞学城8天集训营\import_module.py"""
import sys
print(sys.path) # 显示查找模块的路径,是一个列表
# 若所需模块不在文件同级目录下,则应把模块所在路径添加到sys.path中
#sys.path.append('D:\programming\python\learnPython\路飞学城8天集训营\test_module')
# 因为不同电脑的路径不同,为了可移植,改为动态路径
import os
print(__file__) #打印当前脚本文件路径
path = os.path.dirname(__file__) # 当前脚本的根目录路径
print(path)
sys.path.append(path+'/test_module')
import first_module
first_module.sayhi()
第三方开源模块
官网
豆瓣源(https://pypi.douban.com/simple/)
清华源(https://pypi.tuna.tsinghua.edu.cn/simple)
下载方法:
- pip install + 包名
- Pycharm中设置-项目-python解释器-加号(管理仓库按键中可以添加源)
- pip install -i https://pypi.douban.com/simple/ + 包名 --trusted-host pypi.douban.com
- 升级pippython -m pip install --upgrade pip -i https://pypi.douban.com/simple
常用模块 os模块包就是在目录的基础上加了一个__init__.py文件,每次调用包内文件,都会先执行__init__.py文件来初始化
帮助实现程序与操作系统进行交互
- 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
- 返回指定目录下的所有文件和目录名:os.listdir()
- 函数用来删除⼀个文件:os.remove()
- 删除多个目录:os.removedirs(r“c:python”)
- 检验给出的路径是否是⼀个文件:os.path.isfile()
- 检验给出的路径是否是⼀个目录:os.path.isdir()
- 判断是否是绝对路径:os.path.isabs()
- 检验路径是否存在:os.path.exists()
- 返回⼀个路径的目录名和文件名:os.path.split() e.g
os.path.split(’/home/swaroop/byte/code/poem.txt’) 结果:
(’/home/swaroop/byte/code’, ‘poem.txt’) - 分离扩展名:os.path.splitext() e.g os.path.splitext(’/usr/local/test.py’)
结果:(’/usr/local/test’, ‘.py’) - 获取路径名:os.path.dirname()
- 获得绝对路径: os.path.abspath()
- 获取文件名:os.path.basename()
- 运行shell命令: os.system()
- 读取操作系统环境变量HOME的值:os.getenv(“HOME”)
- 返回操作系统所有的环境变量: os.environ
- 设置系统环境变量,仅程序运行时有效:os.environ.setdefault(‘HOME’,’/home/alex’)
给出当前平台使用的行终止符:os.linesep Windows使用’rn’,Linux and MAC使用’n’
指示你正在使用的平台:os.name 对于Windows,它是’nt’,⽽对于Linux/Unix用户,它
是’posix’ - 重命名:os.rename(old, new)
- 创建多级目录:os.makedirs(r“c:pythontest”)
- 创建单个目录:os.mkdir(“test”)
- 获取文件属性:os.stat(file)
- 修改文件权限与时间戳:os.chmod(file)
- 获取文件大小:os.path.getsize(filename)
- 结合目录名与文件名:os.path.join(dir,filename)
- 改变工作目录到dirname: os.chdir(dirname)
- 获取当前终端的大小: os.get_terminal_size()
- 杀死进程: os.kill(10884,signal.SIGKILL)
- sys.path() 获取环境变量
- sys.argv()
python中表示时间的方式:
- 时间戳(timestamp), 表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。例子:1554864776.161901
- 格式化的时间字符串,比如“2020-10-03 17:54”
- 元组(struct_time)共九个元素。由于Python的time模块实现主要调⽤C库,所以各个平台可能有所不同,mac上:time.struct_time(tm_year=2020, tm_mon=4, tm_mday=10, tm_hour=2,tm_min=53, tm_sec=15, tm_wday=2, tm_yday=100, tm_isdst=0)
UTC时间
即格林尼治标准时间,中国在东八区,即UTC+8
常用方法 - time.localtime([secs]) 将⼀个时间戳转换为当前时区的struct_time。若secs参数未提供,则以当前时间为准。
- time.gmtime([secs]) 和localtime()方法类似,gmtime()方法是将⼀个时间戳转换为UTC时区(0时区)的struct_time。
- time.time() 返回当前时间的时间戳。
- time.mktime(t) 将⼀个struct_time转化为时间戳。
- time.sleep(secs) 线程推迟指定的时间运行,单位为秒。
- time.strftime(format[, t]) 把⼀个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()
- time.strptime(string[, format]) 把⼀个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
import time
print(time.strftime("%Y-%m-%d %X",time.localtime()))
>>>2021-10-03 14:46:53
%y 两位年份 %m 月份 %H 24小时制小时数 %M 分钟数 %a 星期简写 %b 月份简写
%Y 四位年份 %d 日期 %I 12小时制小时数 %S …秒… %A 星期全拼 %B 月份全拼
%p AM或PM %z 当前时区
%j 今年的第几天
%w 这周的第几天,周末为0
%x 本地特定日期表示
%X 本地特定时间表示
%U 今年的第几个星期,周末为星期开始
%W 今年的第几个星期,周一为星期开始
import datetime d = datetime.datetime.now() print(datetime.datetime.now()) # 打印当前时间 >>>2021-10-03 16:21:46.192961 print(datetime.datetime.now() + datetime.timedelta(4)) # 当前时间加4天 >>>2021-10-07 16:21:46.192961 print(datetime.datetime.now() + datetime.timedelta(hours=3)) # 当前时间加3小时 >>>2021-10-03 19:21:46.192961 print(d.replace(year=2025, month=2, day=28)) # 替换时间 >>>2025-02-28 16:21:46.192961random模块



