python笔记11
今日内容
- 函数小高级
- lambda 表达式
- 内置函数
内容回顾
- 函数基本结构
- 参数
- 形参
- 基本参数:def func(a1,a2):pass
- 默认值:def func(a1,a2=123):pass 注意: 默认值如果是不可变类型,随便玩。 可变类型:有坑
- 无敌:*args,**kwargs
 
- 实参
- 位置传参
- 关键字传参
 
 
- 形参
- 返回值
- 默认返回:None
- 特殊情况
 def func():
 return 1,2,32,4
 #(1, 2, 32, 4)
 
- 作用域
- 全局和局部
- 自己有找自己,自己没有找父级。
- 子作用域只能读取或修改父级的值,不能重新赋值。
 NUM = [1,2,3]
 def func():
 # NUM.append(99) # 可以修改父级的值
 global NUM
 NUM = 23123
 func()
 #将全局变量变为23123
 
- 函数的嵌套
 def func():
 name = 'oldboy'
 def inner():
 print(name)
 name = 'alex'
 inner()
 print(name)
 func()
 alex
 alex
内容详细
- 函数小高级 - a = 123 
 name = '老男孩好'
 nums = [11,22,33,4]
 data = nums- def func(): 
 pass # 100行代码- func = 函数
1.1 函数名当作变量来使用
def func():
    print(123)
v1 = func 
func()
v1()
123
123
def func():
    print(123)
func_list = [func, func, func]
# func_list[0]()
# func_list[1]()
# func_list[2]()
for item in func_list:
    v = item()#执行一遍函数,然后把返回值赋值给v。
    print(v)
def func():
    print(123)
def bar():
    print(666)
info = {'k1': func, 'k2': bar}
info['k1']()
info['k2']()
123
666
混淆你
def func():
    return 123
func_list1 = [func,func,func]
func_list2 = [func(),func(),func()]
print(func_list1)
print(func_list2)
info = {
    'k1':func,
    'k2':func(),
}
print(info)
[<function func at 0x0000000001D51EA0>, <function func at 0x0000000001D51EA0>, <function func at 0x0000000001D51EA0>]
[123, 123, 123]
{'k1': <function func at 0x0000000001D51EA0>, 'k2': 123}
1.2 函数可以当作参数进行传递
def func(arg):
    print(arg)
func(1)
func([1,2,3,4])
def show():
    return 999
func(show)
func(show())
1
[1, 2, 3, 4]
<function show at 0x00000000021FDC80>
999
def func(arg):
    v1 = arg()
    print(v1)
def show():
    print(666)
func(show)
666
None
def func(arg):
    v1 = arg()#执行打印666
    print(v1)#返回值为空,打印none
def show():
    print(666)
result = func(show)#func(show)执行结束后,输出666,none
print(result)#返回值为none,输出为none
666
None
None
# 面试题
def func():
    print('花费查询')
def bar():
    print('语音沟通')
def base():
    print('xxx')
def show():
    print('xxx')
def test():
    print('xxx')
info = {
    'f1': func,
    'f2': bar,
    'f3':base,
    'f4':show,
    'f5':test
}
choice = input('请选择要选择功能:')
function_name = info.get(choice)
if function_name:
    function_name()
else:
    print('输入错误')
- lambda表达式
用于表示简单的函数。
# 三元运算,为了解决简单的if else的情况,如:
if 1 == 1:
    a = 123
else:
    a = 456
a =  123  if 1 == 1 else 456
# lambda表达式,为了解决简单函数的情况,如:
def func(a1,a2):
    return a1 + 100 
func = lambda a1,a2: a1+100
func1 = lambda : 100 
func2 = lambda x1: x1 * 10
func3 = lambda *args,**kwargs: len(args) + len(kwargs)
DATA = 100
func4 = lambda a1: a1 + DATA
v = func4(1)
print(v)#101
DATA = 100
def func():
    DATA = 1000
    func4 = lambda a1: a1 + DATA
    v = func4(1)
    print(v)#1001
func()
func5 = lambda n1,n2: n1 if n1 > n2 else n2
v = func5(1111,2)
print(v)#1111
练习题
# 练习题1
USER_LIST = []
def func0(x):
    v = USER_LIST.append(x)#append无返回值,v为none。
    return v 
result = func0('alex')
print(result)
# 练习题2
def func0(x):
    v = x.strip()#返回值为x去掉左右两边空格后的字符串。
    return v 
result = func0(' alex ')
print(result)#alex
############## 总结:列表所有方法基本上都是返回None;字符串的所有方法基本上都是返回新值 #################
# 练习题3
USER_LIST = []
func1 = lambda x: USER_LIST.append(x)
v1 = func1('alex')
print(v1)#none
print(USER_LIST)#['alex']
# 练习题4
func1 = lambda x: x.split('l')
v1 = func1('alex')#splist的返回值为‘l’切割后形成的列表。
print(v1)
['a', 'ex']
# 练习题5
func_list = [lambda x:x.strip(), lambda y:y+199,lambda x,y:x+y]
v1 = func_list[0]('alex ')
print(v1)#['a', 'ex']
v2 = func_list[1](100)
print(v2)#399
v3 = func_list[2](1,2)
print(v3)#3
- 内置函数
- 自定义函数
- 内置函数
- 其他
- len
- open
- range
- id
- type
 
- 输入输出
- input
 
- 强制转换
- dict()
- list()
- tuple()
- int()
- str()
- bool()
- set()
 
- 数学相关
- abs,绝对值 
 v = abs(-1)
 print(v)
- float,转换成浮点型(小数) 
 v = 55
 v1 = float(55)
 print(v1)
 55.0
- max,找到最大值 
 v = [1,2,311,21,3,]
 result = max(v)
 print(result)
- min,找最小值 
 v = [1,2,311,21,3,]
 result = min(v)
 print(result)
- sum,求和 
 v = [1,2,311,21,3,]
 result = sum(v)
 print(result)
- divmod,两数相除的商和余数 
 a,b = divmod(1001,5)
 print(a,b)
 200,1
 # 练习题 请通过分页对数据进行展示
 """
 要求:
 每页显示10条数据
 让用户输入要查看的页面:页码
 """- USER_LIST = []
 for i in range(1,836):
 temp = {'name':'你少妻-%s' %i,'email':'123%s@qq.com' %i }
 USER_LIST.append(temp) # 数据总条数
 total_count = len(USER_LIST) # 每页显示10条
 per_page_count= 10 # 总页码数
 max_page_num,a = divmod(total_count,per_page_count)
 if a>0:
 max_page_num += 1 while True:
 pager = int(input('要查看第几页:'))
 if pager < 1 or pager > max_page_num:
 print('页码不合法,必须是 1 ~ %s' %max_page_num )
 else:
 """
 # 第1页:USER_LIST[0:10] -> 0123456789
 # 第2页:USER_LIST[10:20]
 # 第3页:USER_LIST[20:30]
 ...
 """
 start = (pager-1) * per_page_count
 end = pager * per_page_count
 data = USER_LIST[start:end]
 for item in data:
 print(item)
 
 
- 进制转换相关
- bin,将十进制转化成二进制 
 num = 13
 v1 = bin(num)
 print(v1)
- oct,将十进制转换成八进制 
 num = 8
 v1 = oct(num)
 print(v1)
- int,将其他进制转化成十进制 
 # 二进制转化成十进制
 v1 = '0b1101'
 result = int(v1,base=2)
 print(result)- # 八进制转化成十进制
 v1 = '0o1101'
 result = int(v1,base=8)
 print(result) # 十六进制转化成十进制
 v1 = '0x1101'
 result = int(v1,base=16)
 print(result)
 
- hex,将十进制转换成十六进制 
 num = 16
 v1 = hex(num)
 print(v1)
- 面试题 
 # 1字节等于8位
 # IP: 192.168.12.79 -> 001010010 . 001010010 . 001010010 . 001010010- # 1. 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制并通过,连接起来生成一个新的字符串。
 ip = "192.168.12.79"
 ip_list = ip.split('.') # ['192','168','12','79']
 result = []
 for item in ip_list:
 result.append(bin(int(item)))
 print(','.join(result)) # 2. 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制:
 # 0010100100001010010001010010001010010 -> 十进制的值。 # 3232238671
 方法1:
 ip = "192.168.12.79"
 ip_list = ip.split('.')
 result = []
 for i in range(len(ip_list)):
 result.append('{:08b}'.format(int(ip_list[i])))
 print(int(''.join(result),base=2))
 方法2:
 ip = "192.168.12.79"
 ip_list = ip.split('.')
 result = []
 for i in range(len(ip_list)):
 result.append((bin(int(ip_list[i])))[2::])
 for i in range(len(result)):
 n=len(result[i])
 result[i]='0'*(8-n)+result[i]
 v=int(''.join(result),base=2)
 print(v)
 方法3:
 ip = "192.168.12.79"
 ip_list = ip.split('.')
 result = []
 for i in range(len(ip_list)):
 str = bin(int(ip_list[i]))[2::]
 n = len(bin(int(ip_list[i]))[2::])
 result.append('0' * (8 - n) + str)
 v=''.join(result)
 print(int(v,base=2))
 
 
- 其他
python笔记11的更多相关文章
- selenium+python笔记11
		#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: search in mail box "&qu ... 
- Python笔记 #11# 统计图定制化
		将数据可视化有许多选择: 图的类型 定制化方式 选择什么样的表现方式通常取决于: 数据 你想表达什么 1.Labels # Basic scatter plot, log scale plt.scat ... 
- python笔记-11 rabbitmq
		一.理解rabbitmq的基本背景 1.理解消息队列 1.1 普通queue 在前面的博客中所提到的队列,此处均称之为普通队列 简述一下普通队列的一些分类及不足 1.1.1 基本Queue:queue ... 
- Python标准库笔记(11) — Operator模块
		Operator--标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数.有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数.因此o ... 
- 8.python笔记之面向对象基础
		title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ... 
- python笔记 - day8
		python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ... 
- python笔记 - day7-1 之面向对象编程
		python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ... 
- python笔记 - day7
		python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ... 
- python笔记 - day6
		python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ... 
随机推荐
- SpringBoot-Swagger整合zuul智能列表
			SpringBoot-Swagger整合zuul智能列表 简介 可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调. 现在基本都是多模块微服务化,每个服务都有这样的ui页 ... 
- acwing 239. 奇偶游戏 并查集
			地址 https://www.acwing.com/problem/content/241/ 小A和小B在玩一个游戏. 首先,小A写了一个由0和1组成的序列S,长度为N. 然后,小B向小A提出了M个 ... 
- MySQL的读写分离与主从同步数据一致性
			有没有做MySQL读写分离?如何实现mysql的读写分离?MySQL主从复制原理的是啥?如何解决mysql主从同步的延时问题? 高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联 ... 
- 远程管理服务器--批量管理服务器,vps
			一般大型的企事业单位都有自己的服务器,但是服务器一般都放在机房,辐射较大,噪音大,如何能有效的避免这一情况呢?哈哈,那就来个远程桌面,远程操作服务器吧. 一.使用 iis7远程连接管理工具工具下载官网 ... 
- JVM探秘:Java对象
			本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 对象的创建 虚拟机遇到一条 new 指令时,首先去检查这个指令的参数是否能在方法区常量 ... 
- centos下MySQL登录1045问题解决
			由于需要在centos下部署整个应用,自然少不了对数据库的操作.但很多人可能会遇到一些问题,比如创建用户成功,但是却无法登录. 无法登陆一般就两个原因.第一,远程访问端口没开,第二个原因就是密码错误了 ... 
- Kafka原理及应用(一)
			一. Kafka简介 (1) 消息中间件的两种实现模式 JMS (Java Message Service) 对消息的发送和接收定义了两种模式: 点对点模式:消息的生产和消费者均只有一个,消息由生产者 ... 
- Linux上查找最大文件的 3 种方法
			有时候我们在系统上安装了数十个应用程序,随着使用时间的推移,许多文件变得越来越大,从而导致磁盘空间越来越小.那么问题来了,如何找到系统上这些大文件,然后进行一番磁盘空间清理呢,这篇文章就此介绍几种查找 ... 
- 1078 字符串压缩与解压 (20分)C语言
			文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表示.如果字符没有重复,就原样输出.例如 ... 
- Angular Schematics 三部曲之 Add
			前言 因工作繁忙,差不多有三个月没有写过技术文章了,自八月份第一次编写 schematics 以来,我一直打算分享关于 schematics 的编写技巧,无奈还是拖到了年底. Angular Sche ... 
