学习笔记(三)[函数基础]

作者:加菲猫 2018-09-20 141 0

概念

定义

  • 声明

a = 1
if a == 1:
    def func():
        print('a == 1')
else:
    def func():
        print('a != 1')
  • 传参

# 默认参数放在最后
def func(x,y,z=3):
    return x + y + z
    
# 顺序传参
func(1,2)

# 命名传参
func(y=1,x=2)

# 不定长参数
def func(*var1,**var2):
    print(var)
func(1,2,3,a=1,b=2,c=3)
# 结果:(1,2,3){'a':1,'b':2,'c':3}
  • 返回值

def func():
    return 1,2
    
# 接收一个元组
var = func()

# 接收两个数字
var1,var2 = fec()
  • 多态

根据参数类型的不同,做出不同的操作

# abcabcabc
'abc' * 3

# 6
2 * 3

作用域

# 全局
a = 1

def func():
    # 局部
    a = 2
    # 2
    print(a)
    
# 1
print(a)

# 全局与局部关联
def func():
    global a
    a = 2
    # 2
    print(a)
    
# 2
print(a)
  • 传引用(参数为可变对象,如:列表)

mylist = [1,2,3]
def func(var):
    var[0] = 'a'
    # ['a',2,3]
    print(var)

func(mylist)
# ['a',2,3]
print(mylist)
  • 拷贝,防止全局变量被修改

mylist = [1,2,3]
def func(var):
    var1 = var[:]
    var1[0] = 'a'
    # ['a',2,3]
    print(var1)

func(mylist)
# [1,2,3]
print(mylist)
  • 函数嵌套

def func1():
    pass
def func():
    # 完善 func1 方法
    global func1
    def func1():
        print('abc')
        
# abc
func1()

匿名函数

f = lambda x,y : x + y
# 3
f(1,2)

f = lambda x,y=1 : x + y
# 2
f(1)

funclist = [lambda x : x*x,lambda x : x*x*x,lambda x : x*x*x*x]
# 9 27 81
for func in funclist:
    func(3)

递归

目的:当你发现将要做的就是现在做的(持续做一件事),那么使用递归

  • 循环列表求和(占用内存小,效率低)

mylist = [1,2,3,4,5]
mysum = 0
while mylist:
 mysum += mylist[0]
 # 把第一个元素扔掉
 mylist = mylist[1:]
  • 递归列表求和(占用内存大,效率高)

mylist = [1,2,3,4,5]
def func(var):
 if var == []:
  return 0
 # 返回:列表第一个元素 + func(去掉第一个元素的列表)
 return var[0] + func(var[1:])
mysum = func(mylist)

#1 + func([2,3,4,5])
     #2 + func(2,4,5)
          #3 + func(4,5)
               #4 + func(5)
                    #5 + func([])
                         #0
  • 每天吃一半饼干

cookie = 5000
def eat(cookie,day=0):
    if cookie < 1:
        print('%d天,饼干吃完了' % day)
        return
    cookie /= 2
    day += 1
    eat(cookie,day)
eat(cookie)

OS 模块

作用:管理进程与环境,处理文件系统操作(如:删除、重命名、遍历目录、管理权限)。

import os

# 平台类型(nt:windows、posix:linux/unix)
print(os.name)

# 工作路径
print(os.getcwd())

# 获取当前目录下的文件及文件夹(只有一层)
print(os.listdir())

# 删除
os.remove('')
os.rmdir('')

# 创建
os.mkdir('')
os.makedirs(r'a\b\c')

# 执行命令
os.system('cls')

# 修改工作路径
os.chdir('')

# 修改权限
os.chmod('')
  • os.path

os.path.isdir('')
os.path.isfile('')
os.path.islink('')
os.path.getsize('')

# 获取绝对路径,不会验证路径是否存在
os.path.abspath('')

# 分割为文件路径和文件
os.path.split('')

# 返回最末层文件名
os.path.basename('')

# 判断路径是否存在
os.path.exists('')

# 路径拼接,不会验证路径是否存在
os.path.join('','')
  • 递归遍历目录

import os

mypath = input('请输入要遍历的路径')

def seedir(mypath,level=0):
    level += 2
    if not mypath:
        # 默认遍历工作路径
        mypath = os.getcwd()
    mylist = os.listdir(mypath)
    for var in mylist:
        print('-' * level + '|' + var)
        # 拼接绝对路径
        var = os.path.join(mypath,var)
        if os.path.isdir(var):
            seedir(var,level)
            
seedir(mypath)

发表评论