路飞学城Python-Day12(practise)
# 函数基础
# 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)的更多相关文章
- 路飞学城—Python爬虫实战密训班 第三章
路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...
- 路飞学城—Python爬虫实战密训班 第二章
路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...
- 路飞学城Python爬虫课第一章笔记
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...
- 路飞学城-Python开发集训-第3章
学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...
- 路飞学城-Python开发集训-第1章
学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...
- 路飞学城-Python开发集训-第4章
学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...
- 路飞学城-Python开发集训-第2章
学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...
- 路飞学城Python-Day19(practise)
# 特性1.继承:2.多态:3.封装 # 1.继承的用处:通过继承就可以解决类与类之间的代码冗余关系 # 2.多态的用处:1.增加了程序的灵活性,以不变应万变,使用者都是同一种形式去调用(func(a ...
- 路飞学城-Python开发-第二章
''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...
- 路飞学城-Python开发-第三章
# 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...
随机推荐
- 实现点击EditText登录时,界面上移避免键盘遮挡界面
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&quo ...
- 常规RPC通讯过程【转载】
在 HTTP2 协议正式开始工作前, 如果已经知道服务器是 HTTP2 的服务器, 通讯流程如下: 客户端必须首先发送一个连接序言,其逻辑结构: PRI * HTTP/2.0\r\n\r\nSM\r\ ...
- Unity 已下载工程包存放路径
Mac Finder 中 Shift+Command+G输入后回车 ~/Library/Unity/Asset Store-5.x Windows 么有,自己上别的网站查去~
- Pyhton学习——Day36
#异步IO——Asynchronous#异步效率最高,特点:全程无阻塞# 在说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义.# Stevens给出的定 ...
- 为什么使用GitHub
GitHub的特点: 1.开源式分布版本管理系统 2.开源项目集中的代码库 3.所有略有规模的公司都在使用 GitHub的功能介绍: 1.记录多个版本 2.查看历史操作,可以进行版本吧回退和前进的控制 ...
- HBase入门操作 常用命令和增删改查的简单应用操作
这里启动关闭Hadoop和HBase的顺序一定是: 启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop ssh localhost 开启hadoopcd /us ...
- webpack实战---安装操作
什么是webpack? 他有什么优点? 首先对于很多刚接触webpack人来说,肯定会问webpack是什么?它有什么优点?我们为什么要使用它? Webpack是前端一个工具,可以让各 ...
- Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password
在配置JMX远程访问的时候,设置jmxremote.password文件权限,修改该文件时添加写权限,chmod +w jmxremote.password ,放开角色信息那俩行的注释,保存,再使用c ...
- Spring中基于Java的配置@Configuration和@Bean用法 (转)
spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version ...
- CSS3弹性布局内容对齐(justify-content)属性使用具体解释
内容对齐(justify-content)属性应用在弹性容器上.把弹性项沿着弹性容器的主轴线(main axis)对齐. 该操作发生在弹性长度以及自己主动边距被确定后. 它用来在存在剩余空间时怎样加以 ...