Python小白基础(4)


前言

提示:这里可以添加本文要记录的大概内容:

本文继续继Python小白基础(3)的后续章节部分,介绍了python后面的一些相关基础的知识,还是相对基本的内容,文章可能会有些不严谨存在错误的地方望读者们谅解。


提示:以下是本篇文章正文内容,下面案例可供参考

一、yield传入参数和推导式

1.yield传入参数

yield是可以用来对其中断,然后reuturn出来做处理,最后想把它塞进去继续去执行,这个过程就叫做yield传入参数,属于生成器的内容。关键要会用__next__()

实例👇

#! /usr/bin/python
# -*- coding: UTF-8  -*-
import time

def gen():
    print(123)
    content = yield 1#中断,return1,外面送内容给content
    print("========",content)
    print(456)
    yield 2
    pass


def main():
    g = gen()
    ret1 = g.__next__()#ret1 = 1
    print("第一个yield返回",ret1)
    ret2 = g.send("i am coming")#给第一个yield发东西,发完自动next
    print("第二个yield返回",ret2)
    pass



if __name__ == '__main__':
    main()

实例结果为:

123
第一个yield返回 1
======== i am coming
456
第二个yield返回 2

有yield的函数已经成为一个生成器了,并且,直接调用函数是不会执行生成器里面的代码,只有使用next()或者send(),才会被执行生成器里面的函数。
第一次使用next()的时候,代码会执行到第一个yield(并且获取了yield 返回值 2),也就是本文中的 content = yield 2 ,后面的print 没有被执行,send()也是这样。
send()可以看来,是用来传递第一个参数,也就是将send()里面的内容传递给conetnt ,也就是content = 参数值,所以print 最后输出的是send(),括号里面的值。以此类推。
总结,可以理解为,next()和send()其实原理都差不多,都是从当前执行到下一个yield(不包含下一个yield,就算下一个前面有print,但是print 后面没有yield,也不会去执行。)

在Python中,使用yield的函数被称为生成器函数(generator function)。
针对生成器对象,python提供了两个主要方法,一个是next()一个是send()


2.各种推导式

列表推导式

用一句话把列表表现出来,说白了就是用一句话生成一个列表

实例↓:

#! /usr/bin/python
# -*- coding: UTF-8  -*-


def main():
	#列表推导式
    mul = [i for i in range(30) if i%3 is 0]
    print(mul)
    pass



if __name__ == '__main__':
    main()

结果:

[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

函数列表推导式

#! /usr/bin/python
# -*- coding: UTF-8  -*-

#函数列表推导式
def squerd(x):
    return x*x

def main():
    mul = [squerd(i) for i in range(30) if i%3 is 0]
    print(mul)




if __name__ == '__main__':
    main()

结果为:

[0, 9, 36, 81, 144, 225, 324, 441, 576, 729]

嵌套列表推导式实例

#! /usr/bin/python
# -*- coding: UTF-8  -*-


def main():
   #嵌套函数列表推导式
   fruits =[['apple','banana','orange'],['fig','grape','mimikaz']]
   #找到嵌套列表中包含两个a字母的水果的名字
   print([name for lst in fruits for name in lst if name.count('a')>=2])
   pass


if __name__ == '__main__':
    main()

输出:

['banana']

字典推导式用于键值调换

字典是按键进行遍历的在本案例中

注:本案例中最后输出的时候字典的键和值进行了调换👇

#! /usr/bin/python
# -*- coding: UTF-8  -*-


def main():
    dic1 = {'a':1,'b':2}
    dic2 = {dic1[k]:k for k in dic1}

    print(dic2)


if __name__ == '__main__':
    main()

输出为:

{1: 'a', 2: 'b'}

集合推导式

#! /usr/bin/python
# -*- coding: UTF-8  -*-


def main():
    li = [1,2,3,-1,-2,-3]
    s = {x**2 for x in li}
    print(s)


if __name__ == '__main__':
    main()

运行结果如下:

{1, 4, 9}

二、执行函数

把字符串当作python的代码来执行
当作!!

eval

#! /usr/bin/python
# -*- coding: UTF-8  -*-


def main():
    s = 'print("haha")'
    #简单的作为字符串输出
    print(s)
    #把s里面的字符串当作python代码来执行,这时候s会被其解析
    eval(s)


if __name__ == '__main__':
    main()

以上实例↑就是执行字符串所代表的代码,并且返回结果

exec

#! /usr/bin/python
# -*- coding: UTF-8  -*-
import os

def main():
    s = 'os.system("ipconfig")'
    exec(s)


if __name__ == '__main__':
    main()


运行成功执行了exec危险函数并返回结果
在这里插入图片描述


三、模块

每一个python文件都是一个模块
对于py起的文件名,要避免关键词

引入外部文件

test123的内容如下

#! /usr/bin/python
# -*- coding: UTF-8  -*-

def fun1():
    print("i am test123——fun1")
    pass

def fun2():
    print("i am test123——fun2")
    pass


def main():

    pass

if __name__ == '__main__':
    main()

test1主文件内容如下:

#! /usr/bin/python
# -*- coding: UTF-8  -*-
import test123#引入外部模块

def main():
    test123.fun1()#直接调用
    test123.fun2()#直接调用


if __name__ == '__main__':
    main()

运行test1
输出:

i am test123——fun1
i am test123——fun2

在这里插入图片描述
如果只需要引入某个函数也可以使用from 【模块名】import 【函数】

#! /usr/bin/python
# -*- coding: UTF-8  -*-
from test123 import fun1#如果只需要引入某个函数

def main():
    fun1()


if __name__ == '__main__':
    main()
i am test123——fun1

修改别名
import test123 as nn——给test123引入之后取别名为nn

取其别名为nn

#! /usr/bin/python
# -*- coding: UTF-8  -*-
import test123 as nn#取别名为nn

def main():
    nn.fun1()
    nn.fun2()


if __name__ == '__main__':
    main()

运行效果也一样:

i am test123——fun1
i am test123——fun2

引入所有函数

from test123 import *

#! /usr/bin/python
# -*- coding: UTF-8  -*-
from test123 import *

def main():
    fun1()
    fun2()

if __name__ == '__main__':
    main()

在引用的时候限制引用的函数

头部加上这个就行了

__all__=['fun1']#人家引用你的时候,最多只能引用fun1

四、包

#引入包
import pa.test123
def main():
pa.test123.fun1()

在这里插入图片描述

#! /usr/bin/python
# -*- coding: UTF-8  -*-
import pa.test123#引入包
def main():
    pa.test123.fun1()
    pa.test123.fun2()

if __name__ == '__main__':
    main()

一个包有很多个功能模块
新建文件夹,文件夹里必须包含文件名为_init_.py的文件!!


五、python自带模块

1.json模块

import json
补:转化为json字符串——可以到互联网上传输
反序列化为原来的type类型(这里是字典)

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import json
dic = {'name':'tom',"age":19,'job':'hacker'}
str = json.dumps(dic) #将一个字典转换为jsosn字符串
print(type(str))
print(str)

print("=================")
str2 = json.loads(str)#反序列化为原始的
print(type(str2))
print(str2)

运行结果如下👇:

<class 'str'>
{"name": "tom", "age": 19, "job": "hacker"}
=================
<class 'dict'>
{'name': 'tom', 'age': 19, 'job': 'hacker'}

在这里插入图片描述


2.md5加密模块

md5不仅可以用来加密,也可以用来提取hash值

import hashlib

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import hashlib

def main():
    md5 = hashlib.md5()#使用md5对以后的数据进行摘要加密
    md5.update(('hello world').encode('utf-8'))#对目标进行操作(对字符串加密之前要转为utf-8)
    print(md5.hexdigest())#输出结果就是字符串md5加密后的密文

if __name__ == '__main__':
    main()

结果为:

5eb63bbbe01eeed093cb22bb8f5acdc3

3.配置文件模块

配置文件初始化

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import configparser
def main():
    #初始化
    conf = configparser.ConfigParser()
    conf['default'] = {'money':100,'go':'yes','weapon':'no'}
    conf['home'] = {'island':'xiaodao1'}
    with open('./config','w') as f:
        #配置文件写入
        conf.write(f)
    pass

if __name__ == '__main__':
    main()

运行后创建了一个config文件如下👇
在这里插入图片描述

读取配置文件并判断

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import configparser
def main():
    #初始化
    conf = configparser.ConfigParser()
    #读取配置文件
    conf.read('config')
    #判断是否存在
    print('home' in conf)
    pass

if __name__ == '__main__':
    main()
True

遍历key

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import configparser
def main():
    #初始化
    conf = configparser.ConfigParser()
    #读取配置文件
    conf.read('config')
    #遍历key
    for key in conf['default']:
        print(key)
    pass

if __name__ == '__main__':
    main()

输出

money
go
weapon

或者也可以:

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import configparser
def main():
    #初始化
    conf = configparser.ConfigParser()
    #读取配置文件
    conf.read('config')
    #获取所有的键
    print(conf.options('default'))

if __name__ == '__main__':
    main()

获取对应的值

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import configparser
def main():
    #初始化
    conf = configparser.ConfigParser()
    #读取配置文件
    conf.read('config')
    #获取对应的值
    print(conf.get('default','money'))

if __name__ == '__main__':
    main()

输出

100

获取所有的键值对

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import configparser
def main():
    #初始化
    conf = configparser.ConfigParser()
    #读取配置文件
    conf.read('config')
    #获取所有的键值对
    print(conf.items('default'))

if __name__ == '__main__':
    main()

输出:

[('money', '100'), ('go', 'yes'), ('weapon', 'no')]

4.坐标系模块

定义设置坐标系

#! /usr/bin/python
# -*- coding: UTF-8  -*-

from collections import namedtuple
#定义坐标系


#定义一个名为point的坐标,坐标两个参数分别为x y
def main():
    point = namedtuple('point',['x','y','z'])
    p = point(10,20,30)
    print(p.x)
    pass

if __name__ == '__main__':
    main()
10

5.时间和日期模块

时间模块

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import time
def main():
    print("start")
    time.sleep(3)
    print("end")

    pass

if __name__ == '__main__':
    main()
start
end
#! /usr/bin/python
# -*- coding: UTF-8  -*-

import time
def main():
    #输出当前时间戳(从1970-1-1 0:0:0一直到现在的秒数)
    print(time.time())
    #输出当前的24小时时间
    print(time.strftime('%Y-%m-%d %x'))
    #输出当前的24小时时间
    print(time.strftime('%Y/%m/%d %H:%M'))



    pass

if __name__ == '__main__':
    main()

运行结果为:

1677036198.9363484
2023-02-22 02/22/23
2023/02/22 11:23

在这里插入图片描述

日期模块

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import time
import datetime
def main():
    #显示当前的精准日期
    now = datetime.datetime.now()
    print(now)

    #三周后的
    print(datetime.datetime.now()+datetime.timedelta(weeks=3))


    pass

if __name__ == '__main__':
    main()
2023-02-22 11:29:39.198268
2023-03-15 11:29:39.198268

若要调整时间或者时间戳转换为当前日期↓

#! /usr/bin/python
# -*- coding: UTF-8  -*-

import time
import datetime
def main():
    #显示当前的精准日期
    now = datetime.datetime.now()
    print(now)

    #三周后的
    print(datetime.datetime.now()+datetime.timedelta(weeks=3))

    #调整时间
    print(now.replace(year=2000,month=1,day=1))

    #时间戳转换为当前时间
    sjc = time.time()
    print(datetime.date.fromtimestamp(sjc))

    pass

if __name__ == '__main__':
    main()
2023-02-22 11:34:17.449878
2023-03-15 11:34:17.449878
2000-01-01 11:34:17.449878
2023-02-22
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值