python学习笔记及作业(函数,内置模块,模块与包)

1.作业

爬取内容牛超的poping 视频并存入本地

import requests
res = requests.get('http://f.us.sinaimg.cn/001lksTilx07uuNOl74Q01041200dBV50E010.mp4?label=mp4_ld&template=640x360.28.0&Expires=1560423944&ssig=seTlndPdIs&KID=unistore,video')
print(res.content)
with open('牛超的poping视频.mp4','wb')as f:
    f.write(res.content)

 2.课堂笔记

(1)函数的定义方式:有参函数、无参函数、空函数,

         空函数的用法很重要,宏观角度,先定义功能,具体算法可稍后实现。

         函数的2种嵌套调用方法,函数的名称空间(解释了一个python文件运行时发生的过程,查找函数中某个变量时的过程)

# 今日内容:
# 函数剩余部分
# 内置模块
# 模块与包
# 1.函数的定义方式
# 无参函数:
    不需要接受外部传入的参数
def foo()
    print('haha')
foo()
# 有参函数:
    需要接受外部传入的参数,定义多少个参数,就需要传递多少个参数
def login(user,pwd):
    print(user,pwdw)
login('tank','123')#只有这个正确
login('tank','123','111')#多了参数
login('tank')#少了参数
# 有参函数
def max2(x,y):
    if x>y:
        print(x)
    else:
        print(y)
max2(10,30)
# 空函数
def func():
    pass
# pass代表什么都不做
# 这样就可以从宏观的角度定义所有需要写的函数
# 但此时每个函数的功能不可能快速实现,所以定义为空函数供稍后实现
# 2.函数的返回值
'''
在调用函数时,需要接受函数内部产生的结果,
'''
def max2(x,y):
    if x>y:
        return x
        print(x)
    else:
        return y
        print(y)
res=max2(10,30)
print(res)
# 3.函数的对象
'''
函数的对象指的是函数名指向的内存地址
'''
def func():
     pass
print(func)# 不加括号的func才是等价于函数名的内存地址
func()# 也就是说调用也就是函数名的内存地址+()
#!!!!!!特别好用的一个功能!!!!
dict1 ={
    '1':func,# !!!!!只有不加()的函数名才是代表内存地址的
    '2':func2
}
choice=input("请输入功能编号").strip()
if choice in dict1:
    dict1[choice]()# 此时dict[choice]即为返回的函数名+()=即为调用函数
# 4.函数的嵌套
'''
嵌套定义:
   在函数内,定义函数,可以嵌套任意多层
'''
def func1():
    print('func1.....')
    def func2():
        print('func2.....')
            def func3():
                print('func2.....')
            return func3
    return func2
'''
函数嵌套调用:

'''
# func2=func1()#嵌套的调用方法一#应为此时返回的是func2的内存地址
# func2()# 这里func2就代表着内存地址+(),就可以开始调用函数func2()
# func3=func2()
# func3()
# 嵌套的调用方法二
def func1():
    print('func1.....')
    def func2():
        print('func2.....')
        def func3():
            print('func2.....')
        func3()
    func2()
func1()
# 先调用func1()函数,此时print(‘func1...’), def func2(), func2()作为func1()函数的子语句
# 先执行print(‘func1...’),然后执行def func2()【此时只是对def func2()的定义】等价于无用,
# 之后会执行func2(),此时就会开始调用func2()
'''
!!!!!!!!!解释了是函数的运行机制!!!!!!!
函数的名称空间
python解释器自带的:内置名称空间
自定义的py文件内,顶着最左边定义的:全局名称空间
函数内部定义:局部名称空间
'''
name='tank'
def func1():
    print(name)#  该语句的查找情况是:先在func1()函数内部找,然后到全局空间中,即py文件中找,然后再到pyhton解释器中找
    def func2():
        print('jjj')
print(name,'全局打印')
func1()
# 真正开始运行:先将解释器加载到内存中,py文件加载到内存中,开始调用函数时,再将局部加载到内存中
# 此时开始调用函数,运行到print(name)时,
# 该语句的查找情况是:先在func1()函数内部找,然后到全局空间中,即py文件中找,然后再到pyhton解释器中找

(2)部分内置函数模块

time模块
os 模块
sys模块
# time模块
import time#  导入时间模块
# 获取时间戳
print(time.time())
# 等待2秒
time.sleep(2)
print(time.time())
# os 模块
# 与操作系统中的文件进行交互
# 判断user2文件是否存在
import os
print(os.path.exists('lll.txt'))# 获取的是操作系统里的路径
print(os.path.exists(r'F:\python学习\Day3\user2.txt'))# 获取的是操作系统里的路径
# 获取当前文件的根目录
print(os.path.dirname(_file_))
# sys模块
import sys
# 获取python在环境变量中的文件路径
# 我们在运行时可以成功执行,是因为pycharm自动将我们的可执行文件路劲添加到环境变量中
print(sys.path)
# 把项目的根目录添加到环境变量中
 sys.path.append(os.path.dirname(_file_))
print(sys.path)
json模块
展示将python文件,运行出的结果保存到文件的过程

python学习笔记及作业(函数,内置模块,模块与包)

#json模块
# 写入文件的数据需要先将格式转化为字符串,才能写入
# 运行出来的数据可以存入jason文件中,也可以存入数据库中
# dumps 序列化
# json.dump()的运行过程是:
# 把字典转化成json数据
# 再把json数据转化成字符串,此时才能将数据存入文件中
import json
user_info = {
    'name':'tank',
    'pwd':'123'
}
res = json.dumps(user_info)
print(res)
print(type(res))
with open  ('user.json','wt',encoding='utf-8')as f:
     f.write(res)
# loads:反序列化
# json.loads()
# 把json文件的数据读到内存中
with open ('user.json','r',encoding='utf-8')as f:
    res=f.read()
    user_dict=json.loads(res)
    print(user_dict)
    print(type(user_dict))
# dump
# dump 自带write功能
user_info ={
    'name':  'tank',
    'pwd':  '123'
}  # !!!!转化格式
with open('user_info.json',  'w',  encoding='utf-8')as f:
    json.dump(user_info,  f)
#load
with open('user_info.json',  'r',  encoding='utf-8')as f:
    user_dict=json.load(f)
    print(user_dict)

(3)模块与包

模块

引用:模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。

一般用module_name.fun_name,和module_name.var_name进行使用。这样的语义用法使模块看起来很像类或者名字空间,可将module_name 理解为名字限定符。模块名就是文件名去掉.py后缀。

模块属性__name__,它的值由Python解释器设定。如果脚本文件是作为主程序调用,其值就设为__main__,如果是作为模块被其他文件导入,它的值就是其文件名。

          每个模块都有自己的私有符号表,所有定义在模块里面的函数把它当做全局符号表使用。模块可以导入其他的模块。通常将import语句放在模块的开头,被导入的模块名字放在导入它的模块的符号表中。

        

引用:通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。

# import 模块名
# 放很多文件的及文件夹的名字
import B
# from
# 导入B模块的a文件
from  B import a

a文件中函数如下:

模块属性__name__,它的值由Python解释器设定。如果脚本文件是作为主程序调用,其值就设为__main__,如果是作为模块被其他文件导入,它的值就是其文件名。注意以下写法很重要!!!

 

print('a')
def func1():
    print('kkkkkk')
print(__name__)
# 一般来说,测试某个功能的函数写法
# 都是如下的,这样做的目的是避免
# 其他函数调用该模块时会直接执行里面的函数体
if __name__=='__main__':
   func1()

 

上一篇:Python中的多个装饰器装饰一个函数


下一篇:python3 greenlet模块