# 函数基础
# 1.写函数,计算传入数字参数的和(动态传参)
# def sum_num(x,y):
# return x+y
# print(sum_num(1,2))
# 2.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
# def file(filename,parts):
# f = open(filename,'w+',encoding='utf-8')
# f.write(parts)
# f.close()
# file('staff',"abc")
# 3.写函数,检查用户传入的对象(字符串、列表、元祖)的每一个元素是否含有空内容
# def check(obj):
# for i in obj:
# if len(i.split(' ')) >= 2:
# print('%s内部元素%s有空内容'%(obj,i))
# check(['1 ','2'])
#4.写函数,检查传入字典的每一个value的长度,如果大于2,那么保留前两个长度的内容,并将新内容返回给调用者
# dic = {'k1':'v1v1','k2':[11,22,33,44]}
# # PS:字典中的value只能是字符串或列表
# for k,v in dic.items():
# if len(v)>2:
# dic[k] = v[0:2]
# print(dic)
# 5.解释闭包的概念
# 闭包:关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量
# 参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。
# 而当这个内部函数执行时,它仍然必须访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值
# 但是也会受外部函数的影响
# -------------------------------------------------------------------------------------------------------------------------------
#写函数,检查传入字典的每一个value的长度,如果大于2,那么保留前两个长度的内容,并将新内容返回给调用者
# dic = {'k1':'v1v1','k2':[11,22,33,44]}
# # PS:字典中的value只能是字符串或列表
# for k,v in dic.items():
# if len(v)>2:
# dic[k] = v[0:2]
# print(dic)
# 5.解释闭包的概念
# 闭包:关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量
# 参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。
# 而当这个内部函数执行时,它仍然必须访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值
# 但是也会受外部函数的影响
# -------------------------------------------------------------------------------------------------------------------------------
# 函数进阶
# 1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元祖i,例如:[('红心',2),('草花',2),...('黑桃A')]
# def poke ():
# poke_1 = ['红心','草花','黑桃','方片']
# poke_num = [2,3,4,5,6,7,8,9,10]
# poke_dig = ['A','K','J','Q']
# poke_special = ['JOKER1','JOKER2']
# poke_l1 = []
# for i in poke_1:
# for l in poke_num:
# poke_tuple =(i,l)
# poke_l1.append(poke_tuple)
# for j in poke_1:
# for k in poke_dig:
# poke_tuple_2 = tuple((j+k).strip().split(','))
# poke_l1.append(poke_tuple_2)
# for m in poke_special:
# poke_l1.append(tuple(m.strip().split(',')))
# print(poke_l1)
# poke()
# -------------Low版-------------------------
# def cards():
# num = []
# for i in range(2,11):
# num.append(i)
# num.extend(['J','Q','K','A'])
# type = ['红心','草花','方块','黑桃']
# result = []
# for i in num:
# for j in type:
# result.append((j,i))
# return result
# print(cards())
# -------------高级版-但是有bug('黑桃', 'A')!=('黑桃A')-----------
# 2.写函数,传入n个数,返回字典{'max':最大值,'min':最小值}
# def foo(*args):
# dic = {'max':None,'min': None}
# dic['max'] = max(args)
# dic['min'] = min(args)
# return dic
# print(foo(1,2,3,5,7,3,2,10))
# 3.写函数,专门计算图形的面积
# 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
# 调用函数area(‘圆形’,圆半径) 返回圆的面积
# 调用函数area(‘正方形’,边长) 返回正方形的面积
# 调用函数area(‘长方形’,长,宽) 返回长方形的面积
# def area():
# import math
# def round_area():
# rad = int(input('请输入半径>>'))
# area_round = math.pi*rad*rad
# print('圆形面积是'+str(area_round))
# def square_area():
# side = int(input('请输入边长>>'))
# area_square = side*side
# print('正方形的面积是'+str(area_square))
# def rectangle_area():
# length = int(input('请输入长'))
# width = int(input('请输入宽'))
# area_rectangle = length*width
# print('长方形的面积是'+str(area_rectangle))
# area_choice = input('请选择需要计算的图形\n1.圆形\n2.正方形\n3.长方形')
# if area_choice == '1':
# round_area()
# elif area_choice =='2':
# square_area()
# elif area_choice =='3':
# rectangle_area()
# else:
# print('错误的命令!')
# area()
# 4.写函数,传入一个参数n,返回n的阶乘
# def cal(x):
# sum = 1
# for i in range(1,x+1):
# sum = sum*i
# print(sum)
# cal(10)
# 5.编写装饰器,为多个函数加上认证功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
# def wapper(func):
# def inner(*args,**kwargs):
# import json
# status = False
# if status ==True:
# res = func(*args, **kwargs)
# return res
# else:
# i = 0
# while i<3:
# with open('user_info', 'r', encoding='utf-8') as f:
# info = json.load(f)
# user = [i for i in info]
# username = input('请输入用户名>>>').strip()
# password = input('请输入密码>>>').strip()
# if username in user and info[username] ==password:
# print('登陆成功')
# status = True
# res = func(*args, **kwargs)
# return res
# else:
# print('登录失败,请重试')
# i += 1
# return inner
# @wapper
# def login():
# print('欢迎登陆!')
# @wapper
# def logout():
# print('登出!')
#
# login()
# logout()
# ---------------------------------------
# 生成器和迭代器
# 1.生成器和迭代器的区别?
# 生成器都是迭代器,都是列表、字典、字符串虽然都是迭代对象,但是都不是迭代器,因为不能使用next()方法,但是可以使用iter()函数将它们变成迭代器
# 迭代器就是一个数据流,生成迭代器的时候不需要规定终止点,没有终止也不需要终止条件,这样的就表示为数据流。
# 这是因为Python的Iterator对象表示的是一个数据流,iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出错误,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个序列,所以Iterator的计算是惰性的,只有在需要返回下一个数据时才回去计算。
# 总结:
# 凡是可以作用for循环的对象都是Iterator类型;
# 生成器一定是迭代器,迭代器不一定是生成器(可以自己写对象)
# 2.生成器有几种方式获取value?
# 1.for循环
# 2.next()
# 3.__next__()
# 3.通过生成器写一个日志调用方法,支持以下功能
# 根据指令向屏幕输出日志
# 根据指令向文件输出日志
# 根据指令同时向文件&屏幕输出日志
# 以上日志格式如下
# 2017-10-19 22:07:38 [1] test log db backup 3
# 2017-10-19 22:07:40 [2] user alex login success
# #注意:其中[1],[2]是指自日志方法第几次调用,每调用一次输出一条日志
# 代码结构如下:
# def logger(filename, channel='file'):
# """
# 日志方法
# :param filename: log filename
# :param channel: 输出的目的地,屏幕(terminal),文件(file),屏幕+文件(both)
# :return:
# """
# pass
#
# # # 调用
# #
# #
# # log_obj = logger(filename="web.log", channel='both')
# # log_obj.__next__()
# # log_obj.send('user alex login success')
import datetime
count = 0 def logger(filename, channel):
global count
while True:
count += 1 # 日志方法第几次调用
mes = yield # 接收消息
info = '%s [%s] %s'% (datetime.datetime.now(), count, mes) def file(): # 输出到文件
with open(filename, "a", encoding="utf-8") as f:
f.write("\n%s" % info) def terminal(): # 输出到终端
print(info) if channel == "file": # 输出到文件
file()
elif channel == "terminal": # 输出到终端
terminal()
elif channel == "both": # 都输出
file()
terminal()
log_obj = logger(filename="test_file", channel='both')
log_obj.__next__()
log_obj.send('user alex login success') # 发送消息
log_obj.send('test log db backup 3')

# 内置函数
# 1,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb
# name=['alex','wupeiqi','yuanhao','nezha']
# def change(x):
# return x+'_sb'
# res = map(change,name)
# print(list(res))
# 2,用filter函数处理数字列表,将列表中所有的偶数筛选出来
# num = [1,3,5,6,7,8]
# def func(x):
# if x % 2 == 0:
# return x
# print(list(filter(func,num)))
# 3,如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
# portfolio = [
# {'name': 'IBM', 'shares': 100, 'price': 91.1},
# {'name': 'AAPL', 'shares': 50, 'price': 543.22},
# {'name': 'FB', 'shares': 200, 'price': 21.09},
# {'name': 'HPQ', 'shares': 35, 'price': 31.75},
# {'name': 'YHOO', 'shares': 45, 'price': 16.35},
# {'name': 'ACME', 'shares': 75, 'price': 115.65}
# ]
# 计算购买每支股票的总价
#   用filter过滤出,单价大于100的股票有哪些
# def sum():
# for i in portfolio:
# print(i['name'],i['shares']*i['price'])
# f = filter(lambda d:d['price']>=100,portfolio)
# print(list(f))

路飞学城Python-Day12(practise)的更多相关文章

  1. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  2. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  3. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  4. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

  5. 路飞学城-Python开发集训-第1章

    学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...

  6. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  7. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...

  8. 路飞学城Python-Day19(practise)

    # 特性1.继承:2.多态:3.封装 # 1.继承的用处:通过继承就可以解决类与类之间的代码冗余关系 # 2.多态的用处:1.增加了程序的灵活性,以不变应万变,使用者都是同一种形式去调用(func(a ...

  9. 路飞学城-Python开发-第二章

    ''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...

  10. 路飞学城-Python开发-第三章

    # 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...

随机推荐

  1. ECMAScript prototype的一个疑问。

    既然是疑问 当然首先要贴一段代码. 背景: 探究js的原型继承模式. 疑惑:为何person1和person2的prototype 居然是相等的. 附: 1.Object.create(proto, ...

  2. MySQL监控SQL及命中率脚本

    [root@hank-yoon scrips]# vi mysqlstat.sh​​​/export/servers/mysql/bin/mysqladmin -P3306 -uyoon -pyoon ...

  3. Uboot优美代码赏析1:目录结构和malkefile分析

    Uboot优美代码赏析1:目录结构和malkefile分析 关于Uboot自己选的版本是目前最新的2011.06,官方网址为:http://www.denx.de/wiki/U-Boot/WebHom ...

  4. 2019-03-14 Python爬虫问题 爬取网页的汉字打印出来乱码

    html = requests.get(YieldCurveUrl, headers=headers) html=html.content.decode('UTF-8') # print(html) ...

  5. (转载)使用Maven构建多模块项目

    原文:https://www.cnblogs.com/xdp-gacl/p/4242221.html#undefined 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最 ...

  6. SpringBoot中打包设置,将配置文件打包在外部

    一.每次用maven的打包工具打包的时候 总是将配置文件一起打包进jar中!配置文件有点小修改就要重新打包很麻烦!!!!为了解决这一麻烦!找 了很多方法,下面的配置已经实现可用 我的项目目录结构如下 ...

  7. linux 文件的权限说明

    1.开头 d:表示问文件夹 ( directory ) -:表示普通二进制文件 ( 压缩包.文件 等等 ) l:表示软连接文件 ( link 硬链接或软链接 ) 2.权限 ( 3 个为一组 ) r:读 ...

  8. [terry笔记]学校管理系统

    如下是要求: # 角色:学校.学员.课程.讲师# 要求:# 1. 创建北京.上海 2 所学校# 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上 ...

  9. EOSS V3.0.2 企业运营支撑系统(基于RBAC原理的权限管理)

    下载地址:https://github.com/jelly-liu/EOSS 一:EOSS 功能介绍 其于用户,角色,权限,资源(即菜单)的一套"简约有用"的权限管理系统,可在其基 ...

  10. Struts(19)Struts集成

    Struts2 MVC架构 模型视图控制器(Model View Controller)或MVC,MVC是俗称.是一种软件设计模式,用于开发Web应用程序.模型 - 视图 - 控制器模式是由下面三个部 ...