1、globals() 返回装有全局变量及其对应值的字典
locals() 返回装有当前局部变量及其对应值的字典,对于嵌套函数,不包含上层函数的局部变量
2、eval函数
eval函数:把一个字符串当成一个表达式来执行,返回表达式执行后的结果,
语法:eval(source(String maybe),globals,locals)
该函数不接受关键字传参
如果传入的变量在globals和locals中都存在,那么将会取locals中的值
3、exec函数
把一个字符串当作程序来执行,和eval一样
4、lambda表达式(又称为匿名函数)
作用:创建一个匿名函数对象
同def类似,但是不提供函数名
lambda [形参1,形参2,...]:表达式
调用时将返回表达式的值给lambda,该方法创建的函数只能有一个语句
注意:[]内的内容可以省略
该方法用于创建简单的函数,比如
def myadd(x,y):
return x+y
等价于
myadd = lambda:x,y:x+y
该语句创建函数比较简单并且可以随时创建和销毁,有利于减少函数的耦合度
5、高阶函数high order function
接受一个或多个函数+其他类型参数作为参数传入,并返回一个函数
6、python内置的阶函数map函数
map函数:map(func,*iterablas)
用函数对可迭代对象中的每一个元素做为参数计算出新的可迭代对象,当最短的一个迭代器完成迭代后此迭代器生成完毕
这里只能用元组作为其实参,如果函数有多个形参,则需要多个元组分别给函数的形参传参
7、python内置的高阶函数filter函数:
filter(function,iterable)
用函数function函数运行iterable中的每一个对象,如果函数返回False则将函数丢弃,如果函数返回True则保留此数据
示例:筛偶数
def shai(x):
return True if x % 2 == 0 else False
for x in filter(shai,range(1,100+1)):
print(x)
8、sorted函数
sorted(iterable,key=None,reverse = False)
说明:
key是一个函数,用来提供排序的依据
reverse标志用来设置是否降序排序
示例:
L = [5,-2,-4,0,3,1]
L2 = sorted(L,reverse = True,key = abs)
利用列表元素的绝对值对列表进行排序
9、小项目:学生信息管理系统的学生信息输入函数
def input_student_info():
student_info_list = list()
while True:
name = input("please input name:")
if not name:
return student_info_list
str_age = input("please input age of %s:"%name)
age = int(str_age)
str_score = input("please input score of %s:"%name)
score = int(str_score)
dic = dict(name = name,age = age,score = score)
student_info_list.append(dic)
print(input_student_info())
10、闭包closure
将函数及其运行的环境打包在一起,成为闭包
原则:
示例:计算一个数的n次方的函数
def mypower(y):
def fn(x):
return x**y
return fn
pow2 = mypower(2)
print(pow2(100))
这里,pow2绑定了一个函数,该函数在创建时,创建了其运行环境,包含了变量y,绑定函数fn的变量,当pow2接收到返回的函数变量时,pow2也接收到了这个环境,这个环境和函数fn合称“包”,称为闭包
通常在解释执行的语言内才有闭包
11、装饰器decorators
装饰器是一个函数,主要作用是用来包装另一个函数或者类,包装的目的是在不改变原函数名或者类名的情况下,改变被包装对象的行为
12、函数装饰器functional decorators
函数装饰器传入是一个函数,返回也是一个函数
当函数f1被装饰器函数d1装饰时,调用f1时,会先调用d1函数,参数时f1的函数变量,然后装饰器函数d1会返回一个函数,然后解释器会执行这个返回的函数,除非d1返回了f1,否则不会执行f1,所以叫做函数装饰器
通常用于在执行函数之前再执行一部分功能,决定是否执行函数,比如:
#银行存钱和取钱
def permission_check(fn):
def check(name,num):
print("Sending a short message to confirm......please wait......")
fn(name,num)
return check
@permission_check
def save_money(name,num):
print("%s saved %d yuan successfully" % (name,num))
def withdraw_money():
print("%s withdrawed %d yuan successfully" % (name,num))
save_money("xie",1000)
#给存钱加上了函数装饰器
13、面试题
def fun1(n=0,l=[]):
l.append(n)
fun1(100)
fun1(200)#打印结果为[100,200]
函数的参数属于函数,不会因为函数的结束调用而销毁
写成如下可以避免默认参数一直存在的问题
def fun1(n=0,l=None):
if l == None:
l = []
...
14、模块module
模块是一个包含有一系列函数、类、变量的程序组
模块是一个文件,模块文件拓展名通常是.py
可以让一些相关的函数、类等内容有秩序的组织在一起,使逻辑更加清晰
15、模块分类
内置模块,解释器内部直接使用
标准库模块,安装时已经安装,并且导入后直接使用,比如copy,time,sys
第三方模块,一般开源,需要自行安装。可以使用pip3 install tensorflow
用户编写自己的模块
16、模块导入import
import module_name [as new_module_name][,module_name_2[as new_name2]]......
示例:
import math
import tensorflow as tf
import sys,os
17、使用模块
module_name.属性名 e.g. math.e
#属性即变量
module_name.函数名(参数) e.g. math.sin(3.14)
18、查看模块列表
dir(math)
help(math)
查看模块中的变量与函数,返回一个字典
19、导入模块部分内容
from module_name import 属性名[as 新的属性名],属性名2 [as 新的属性名2]......
from module_name import 函数名[as 新的函数名],函数名2 [as 新的函数名2]......
示例:
from math import pi
from math import sin,cos
会直接在本地创建一个函数,这样不用再用math.pi来调用,直接使用pi就行
20、from math import *
直接导入模块的所有函数与属性
可以直接使用sin,cos,pi而不用再加math.
21、dir()函数
dir([对象]) 返回字符串列表
如果没有参数,返回当前作用域所有变量列表
如果有参数
参数是模块:返回这个模块的全部变量
参数是一个类对象,返回类对象的所有变量、并递归基类所有变量
对于其他对象,返回所有变量、类变量和基类变量
dir 和 globals有区别,dir返回变量名列表,globals返回变量名:变量值的字典
22、时间模块time
在linux、unix系统上,计算机元年为1970年1月1日00:00:00
UTC时间即(Coordinated Universal Time,坐标通用时间)格林威治(英国)时间,UTC世界范围内通用
DST(Daylight Saving Time,阳光节约时间),又称为夏令时,是经过日照时间修正后的时间,夏天时间提前一个小时,因为光照问题,可以节约用电,用不到,不用管
时间元组,由九个整数组成
年月日时分秒 星期几、元旦开始日(从元旦到现在的时间,1-366)、夏令时修正时间
后面三个可以省略,这主要用于告诉计算机一个时间
23、time重要属性
time.timezone 本地时间与UTC时间的时间差(秒)
重要函数
time.time() 返回从计算机元年到现在的秒数
time.sleep(sec) 让程序睡眠一段时间
time.gmtime([sec]) 给定描述转换为UTC时间元组,不给sec则用当前秒数转换
time.asctime([tuple]) 将给定的元组转换成当地时间字符串,若不给,则用当前时间元组转换
time.mktime(tuple) 将给定时间元组转换为距计算机元年的秒(UTC时间)
time.localtime([secs]) 将UTC秒数时间转换为本地时间元组
24、练习题:输入出生年月日,计算已经活了多长时间
import time
str1 = input("please input year month day of your birth")
l = str1.split(sep = ' ')
t = (int(l[0]),int(l[1]),int(l[2]),0,0,0,0,0,0)
print(t)
sec_then = time.mktime(t)
daynum = (time.time() - sec_then) // (3600*24)
print("you have been born for %d days" % daynum)