python——基础教程——17

Python第十七节课


本节内容

Mon 06 12:00 Tue 07 12:00 Wed 08 12:00 Thu 09 12:00 Fri 10 12:00 Sat 11 12:00 Jan 12 12:00 Mon 13 函数 匿名函数 面向对象 作业(文件) 涉及范围 基础教程——17
函数

函数的定义

# 函数往往是表示一组重复的数据和代码块
# 函数使用关键字def来表示定义函数
# 函数的名字一般是有特殊的含义,我们往往使用驼峰命名法来命名。

函数的调用

# 函数的声明结束之后,函数并不会被调用
# 我们需要直接写明函数的调用

返回值

# 函数中,我们可以使用return来表示函数的返回值
# 也就是说,我们将函数调用之后,会有个返回值
# 返回值往往表示函数的结束,当函数遇到return之后,这个函数就停止。

函数的参数

必备参数

# 形参和实参的个数必须是一致的,否则就会报错

缺省参数

# 我们可以定义参数,这样当某个参数没有传入的时候
# 可以直接使用缺省参数

关键字参数

# 我们可以在调用的时候,使用关键字参数,这样参数将不会受到位置的限制

可变参数

# 可以使用*arge来表示可变的参数,这样形参和实参的个数可以不一致。

例子:

def func(a, b):
    return a + b


func(1, 2) ---> 必备参数的形参和实参一一对应


def func(a='1', b='2'):
    return a + b


func()	---> 缺省参数的实参可以不设定,但是一旦设定,位置也是一一对应的


def func(a, b):
    return a + b


func(b=1, a=2)	---> 关键字参数,实参可以根据名字传递给形参


def func(a, *arges):
    print(a)		---> 1
    print(*arges)		---> 2, 3, 4

    
func(1, 2, 3, 4)	---> 不限长参数,这个时候表示至少有一个参数,其余参数不被限制
变量

作用域

# 局部作用域中的变量我们称之为叫局部变量
# 全局作用域中的变量我们称之为叫全局变量
# 局部变量只能在局部作用域中使用,外部函数不能使用
# 全局变量可以被任何一个函数使用,对于所有的函数都起作用。

作用域链

扫描二维码关注公众号,回复: 9858222 查看本文章
# 作用域链是指,我们会有限的使用局部变量,如果局部变量不存在,那么就会使用全局变量。

闭包

# 如果希望其中的某一个变量不被回收,能够一直存在在程序中。
# 我们可以使用闭包来实现,即在外层函数中声明并返回里层函数。
# 里层函数中可以声明一个局部变量,这样局部变量并不会被回收掉。
# 因为当我们调用外层函数的时候,里层函数就会被调用
# 但是外层函数被回收的时候,里层函数还没有执行结果
# 所以程序是不会强制回收的。

关键字声明变量

global 		# 可以将局部变量变成全局变量
nonlocal 	# 将变量变成非局部变量 匿名函数
匿名函数
# lambda 表示声明一个没有名字的函数
# 这个函数是单行的,只能放置很少的代码
# 语法结构:lambda x,y : x+y
# 其中冒号前面表示参数,冒号后边表示返回值

递归函数

# 我们可以在函数中自己调用自己
# 但是递归函数最多的调用次数就是998次,多出的就不会再遍历。

test:

​ 请使用函数将昨天的作业进行一下的修改

​ 在时间为偶数的日志文件中,任意添加一段文字。

# 根据昨天的作业
import datetime
import os


def file_tree(path):
    a = ['物联网', 'AI', 'matplotlib', 'anaconde', 'NLP', 'lua']
    for i in a:
        os.chdir(path)
        os.mkdir(i)
        os.chdir(path + f"//{i}")

        def test(z):
            if z % 2 == 0 and z <= 10:
                now = datetime.datetime.now().date()
                result = now - datetime.timedelta(days=z)
                open(f'{result.strftime("%Y-%m-%d")}.txt', 'w+')
                with open(f'{result.strftime("%Y-%m-%d")}.txt', 'w+') as f:
                    f.write('偶数哦~')
                return test(z+1)
            elif z % 2 != 0 and z <= 10:
                now = datetime.datetime.now().date()
                result = now - datetime.timedelta(days=z)
                open(f'{result.strftime("%Y-%m-%d")}.txt', 'w+')
                return test(z+1)
        test(z=0)


file_tree('E://sample')

注:简单来说,我们取消了while循环,采用递归为神的思维。要清楚,return返回的是test这个函数自己,也就是说test函数内部如果没有符合条件的z,就会触发return返回。也就变相终止了原地打圈圈。(如果还有什么地方不清楚,请留言~)

面向对象编程思维

类的定义

# 使用class关键字来定义一个类

类的属性

# 声明一个类之后我们可以设置一个默认属性
# 也可以不设置默认属性

类的属性增加和删除

# 类的属性是可以在实例化之后动态增加的
# 同时也可以删除
# 例如:
class Person(object):	---> object 表示继承的父类
    country = 'china'	---> 默认的属性


a = Person()	---> 对Person进行实例化
country = 'china'		---> 默认的属性(不用在意)
a.country		---> 访问属性
a.name = '喜洋洋'		---> 增加属性
del a.country		---> 删除属性		

test:
设定Person这个类
每一个人的默认属性都是中国人
但是每一个人的名字和年龄都是 不一样的
尝试写出这个类,并创建几个新的人。写法看自己的水平,可以写的很简单。

作业:将昨天作业进行改变,删除日期为奇数的文件。(使用函数式)

import os


def delsmfiles(path):
    os.chdir(path)
    oldpath = path
    for i in os.listdir(path):
        if os.path.isfile(i):
            num = i.split(".")[0].split("-")[-1]
            if int(num) % 2 == 0:
                print("{}是偶数日期的文件,已被删除".format(i))
                os.remove(i)
        else:
            new_path = os.path.join(oldpath, i)
            delsmfiles(new_path)


delsmfiles(r"E://sample")
# 第二个split(“-”)会出现黄色,这个没有关系。
发布了99 篇原创文章 · 获赞 34 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_42346414/article/details/86181832
今日推荐