一、函数

1、函数的传参:

(1)值传递:将实际的参数复制一份传递给形参,函数中修改形参时,不会影响到实际参数;

def a(b,c=2):
    return b+c

print(a(10))
print(a(123,2))
print(a(2))

python进阶版 python 进阶_作用域


(2)引用传递:将实际参数的地址传递给形参,函数修改形参时,会影响到实际参数;

def a(b,d=[]):
    d.append(b)
    return d

print(a(10))
print(a(123,[]))
print(a('a'))

python进阶版 python 进阶_开发语言_02


(3)不可变类型传参是值传递,可变类型参数传递是引用传递;

2、闭包

(1)必须有一个内嵌函数;
(2)内嵌函数必须引用外部函数的变量;
(3)外部函数的返回值必须是内嵌函数

def extend(a):
    def hello(b):
        return a*b
    return hello
hello=extend(2)
hello(6)

闭包的作用:

3、*args和**kwargs的作用

(1)*args 发送一个非键值对的可变数量的参数列表给一个函数,*args会接受任意多个参数,并把这些参数作为元祖传递给函数;
(2)**kwargs存储可变的关键字参数,允许使用没有事先定义的参数名,将接收到任意多个关键字参数作为字典传递给函数;
(3)必须按照arg、*args*、*kwargs的顺序。

4、递归

(1)递归模型

def recursions(n):
    if n==1:
        # 退出条件
        return 1
    # 继续递归
    return n * recursions(n-1)

(2)递归深度

sys.getrecursionlimit()

5、函数和方法

如果是类调用的,需要穿self参数,则是函数(FunctionType),如果是对象调用的,不需要传self参数,这时他是一个方法(MethodType)

6、python变量的搜索顺序

本地作用域(Local)–>当前作用域被嵌入的本地作用域(Enclosing locals)–>全局/模块作用域(Global)–>内置作用域(Built-in)

二、模块:

1、os模块:

os模块是负责程序与操作系统的交互,提供了访问操作系统底层的接口
sys模块是负责python与python解释器的交互,提供了一系列的函数和变量,用于操控python时运行环境

os.getcwd() # 获取当前程序所在目录
os.name # 判断系统类型名称
os.path # 获取文件的属性信息
...

python进阶版 python 进阶_开发语言_03


可以用subprocess模块执行shell脚本

2、__name__的作用:

  • 一个模块被另一个模块第一次引用时,其主程序将全部运行。如果想在模块被引入时,模块中的某一块程序不被执行,那么此时可以用__name__属性来使该程序块仅在该模块自身运行时被执行;
  • 每个模块都有一个__name__属性,当其值是__main__时,表明该模块在自身运行,否则是被引入

3、pickle模块的作用

(1)序列化后存入文件

pickle.dumps(对象,文件对象)

(2)从文件中反序列化对象

pickle.loads(文件对象)
  • 可以处理复杂的序列化语法(例如自定义的类的方法、游戏的存档)
  • 序列化的是对象,而不是内存地址

4、random模块

  • random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。
  • random.uniform()正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。
  • random.randint()随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值,python
    random.randint。
  • random.choice()可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。
>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] ) #随机选取字符串: 
'lemon'
  • random.shuffle()如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。
p = ["Python", "is", "powerful", "simple", "and so on..."] 
random.shuffle(p) 
print p 
#结果(因为随机,所以你的结果可能不一样。) 
#['powerful', 'simple', 'is', 'Python', 'and so on...'] 
p = ["Python", "is", "powerful", "simple", "and so on..."]
  • random.sample()可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。

5、日志(logging)

(1)日志的级别

python进阶版 python 进阶_python_04


(2)logging.basicConfig()函数说明

logging.basicConfig(**kwargs)

python进阶版 python 进阶_numpy_05


python日志处理

6、python装饰器

提高了代码的复用性

(1)常用于:

  • 引入日志
  • 函数执行时间的计算
  • 执行函数前预备处理
  • 执行函数后的清理工作
  • 权限校验
  • 缓存

7、python构造器

构造方法也叫构造器

__init__

8、python生成器

(1)生成列表的方式:

  • 列表推导式(耗内存)
  • 生成器(一边循环一边计算),依赖于yeild

三、内置函数

1、map()函数

根据提供的函数对指定序列做映射
map(function,iterable,...)
print(list(map(str,[1,2,3,4,5,6,7,8,9])))

python进阶版 python 进阶_numpy_06

2、reduce()函数

reduce(function,iterable,[initializer])

3、filter()函数

把传入的函数依次作用域序列中的每个元素,然后根据函数返回值(True,False)进行过滤,决定是否保留该元素,函数返回值必须是True或者False

def isOdd(n):
    """ 判断奇数 """
    return n%2==1
f=filter(isOdd,[1,2,3,4,5,6,7])
print(list(f))

python进阶版 python 进阶_python进阶版_07

4、enumerate()函数

enumerate()用于将一个可遍历的数据对象(列表、元祖和字符串)组合成一个索引序列,同时列出数据和数据下标,该函数返回enumerate(枚举)对象

enumerate(一个序列、迭代器或者其他支持迭代的对象,[start=0])

5、zip()函数

以一个或多个序列作为参数,返回一个元祖的列表,并将这些序列中并排的元素配对,当传入的参数长度不同时,自动以最短的序列长度为准进行截取

a=[1,2,3]
b=[4,5,6,7]
print(list(zip(a,b)))
# 解压
a1,b1=zip(*zip(a,b))
print(a1,b1)

python进阶版 python 进阶_python_08

6、hasattr()、getattr()和setattr()

(1)hasattr():

hasattr(object,name)

判断一个对象中是否含有name属性或者name方法,返回bool值

(2)getattr()

hasattr(object,name,[default])

获取对象object的属性或者方法,若存在则打印出来,若不存在则打印默认值,如果返回的是对象的方法,那么打印的结果是方法的内存地址,如果需要运行这个方法,那么可以在后面添加括号

(3)setattr()

setattr(object,name,[default])

给对象属性赋值,若属性不存在,则先创建再赋值