三目运算: 语法糖

只适用于简单的if else

执行代码1 if 条件 else 执行代码
age = 19
print('你可以进入网吧,成年人欢迎') if age >= 18 else print('未成年,好好学习,天天向上')
======================================================
列表推导式 快速生成一个列表

格式1 [值1 循环 if 条件]
格式2 [值1 if 条件 else 值2 循环]
# 1-10之间的奇数乘以10,偶数乘以100
list1 = []
for i in range(1,11):
    if i % 2 == 1:
        list1.append(i*10)
    else:
        list1.append(i*100)
print(list1)

list2 = []
=====================================
列表推导式 快速生成一个列表

格式1 [值1 循环 if 条件]
格式2 [值1 if 条件 else 值2 循环]
# 将大写的key对应的value改为张三,其余的改为李四
dict1 = {'a':10,'B':20,'c':True,'D':'hello world','e':'python教程'}
dict2 = {}
for key,value in dict1.items():
    if key.isupper(): # 是大写
        dict2[key] = '张三'
    else:
        dict2[key] = '李四'
print(dict2)

dict3 = {key:'张三' if key.isupper() else '李四' for key,value in dict1.items()}
print(dict3)
========================================================
函数 : 封装代码,达到可以重复使用的效果  # 可以理解为定义公式

函数的定义
def 函数的名称(参数):   参数可有可无,根据实际情况去设置
    代码块
    函数名()

    函数定义好了之后,实际上是没有任何意义,只有当我们调用了函数,函数才有了意义
# 定义函数
def print_demo():
    # 函数的功能
    print('wangyanming')

# 调用函数
print_demo()
函数参数

 函数定义的时候,有几个形参,那么调用函数的时候,就传几个实参
# 计算任意两个数之和
def func1(a,b):  # a,b就是参数,变量
    # 函数功能 ,计算两个数之和
    c = a +b
    print('%s+%s=%s'%(a,b,c))

func1(3,2)  # 实参
func1(1001040014,4510120201)
======================================
返回值 ,函数的结果


return 结果

  返回值的作用,返回函数的结果,便于之后再去使用,默认是None
  调用函数的时候,就能够拿到函数的返回值
  如果想要在控制台看到返回值,就需要打印函数的调用

  返回值只能有一个,如果有多个,可以放在序列当中

  return也是函数的出口,当函数遇到return之后,它下面的代码就不会去执行了
def func1(a,b):
    c = a + b
    # print(c)
    return  c
aa = func1(1,3)
print(aa*4)
==========================
函数嵌套

在函数的内部,可以去调用其它的函数


函数定义以后,不会有任何的实际意义,当调用函数之后,函数才有了意义
def func1():
    print('func1....')
    func2() # 调用func2函数

def func2():
    print('func2....')

def func3():
    print('func3....')
    func1()   # 调用func1函数

func3()
===========================================
函数的作用域 函数的作用范围

全局变量: 定义在函数外部的变量,任意函数都能使用

局部变量: 定义在函数内部的变量,只能在函数内部使用

函数内部:能够访问全局变量,但是不能修改全局变量
函数内部,可以修改局部变量
def func2():
    a = 11
    a += 1
    print(a)
func2()
=======================
global 修改全局变量

如果想要在函数内部修改全局变量,则需要用global修改
global一般就在函数开头的位置,一定要放在修改全局变量的上方
a = 10

def func1():
    global a   # 告诉程序,修改全局变量a
    a += 1   # 修改全局变量
    print(a)

func1()
print(a)
===================
缺省初始(默认参数): 在定义函数的时候就已经给了默认值,调用函数的时候
可以不传值,如果下传值用的就是当前的默认值
如果传了值,就用传递过来的值,将原来的默认值进行覆盖

 默认参数要放在普通参数的后面

 定义了几个形参,那么调用函数的时候就传几个值
 传递的值和形参的位置是一一对应的,也就是说,第一个值传给第一个形参
 第二个值传给第二个形参....
# sort()
list1 = [1,5,3,6]
list1.sort(reverse=True) # reverse=False 也是内置
print(list1)
==========================
不定长参数: 在不确定函数需要多少个形参的时候
不定长参数: 可以接收多个值

*args     args可以是任意的变量名,但是*号不能掉
     默认以元组的形式接收传递的值
     可以不传值
     要放在形参的后面

**kwargs  kwargs可以是任意的变量名,但是**不能掉!!
    默认以字典的形式接收传递的值
    可以不传参
    要放在形参的后面


*args必须在**kwargs的前面
def func2(a,b,*args,**kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)

func2(2,6,2,3,4,name='课耗',age='14')
============================================
变量引用: 我们在进行赋值操作的时候,并不是把之赋给了变量而是
把当前值所在的内存地址给了变量,变量保存的就是数据的内存地址
a = 10
print(id(a))
a = 20
print(id(a))
====================================
递归: 函数反复调用自己
num1 = 1 # 初始值
jiecheng = 1  # 初始的阶乘值
while num1<=5:  
    jiecheng *= num1 
    num1 += 1
print(jiecheng)
===================
匿名函数: 没有名字的函数

lambda  参数:功能
自带返回值
a = lambda a,b:a+b
print(a(2,3))
=====================
文件操作步骤: 打开文件,读该写,关闭文件

文件路径:
    相对路径 : 有一个参照物(本文件)
    .\ 当前目录
    ..\ 当前目录的上一级目录

    绝对路径: 从当前电脑的盘符出发,具体到某一个文件夹当中的某个文件
# 在08_函数晋级文件夹里面创建一个tast.txt文件
file2 = open(r'..\08_函数晋级\tast.txt','w')

file2.close()
========================
w: 文件不存在,会新建文件 如果文件存在,会将原有的内容进行覆盖
r: 文件不存在,会报错,如果文件存在,不支持写入,只能读取文件内容
a: 文件不存在,会新建文件 ,在原有的内容的基础上追加内容,不能读
b: 二进制操作文件 当内容不是文本的时候,用b

w+ 可读可写 文件不存在,会新建文件 如果文件存在,会将原有的内容进行覆盖
r+ 可读可写 文件不存在,会报错
a+ 可读可写 文件不存在,会新建文件 ,在原有的内容的基础上追加内容
wb 二进制方式写入
rb 二进制方式读
ab 二进制追加
wb+ 二进制方式读写
rb+ 二进制方式读写
ab+ 二进制方式读写
# 打开文件
file = open('test.txt','w')

# write()  写入
file.write('每天星期天,要放假了好开心')

# # read() # 读取
# print(file.read())

# # 关闭文件
file.close()
============================
write()  写入   只能写入字符串

writelines()  写入,可以写入字符串,也可以写入序列,前提是序列里面的内容是字符串

read()  读取全部内容
readline() 一次读取一行内容
字符编码   编码表,相当于一个字典
open(文件路径,操作模式,字符编码)  utf-8 万国语言  GBK
如果说你写入文件的时候,指定了字符编码的格式,那么读取文件的时候,也需要指定
==========================
上下文管理: 不需要手动关闭文件,代码执行完毕,自动关闭文件

with open as 变量名:
with open('test.txt','w+') as f1:
    # 写入内容
    f1.write('几哈就赛事,卡收款进度')
    # 刷新,缓存到磁盘当中,进行保存
    f1.flush()
    # tell() 获取当前光标的位置
    # print(f1.tell())
    # seek()  手动调整光标的位置
    f1.seek(0)
    print(f1.read())
    # 光标,指针
=======================
os模块. python标准库
这个命令会了,那么linux命令就有很多相同的地方
# 导入os模块
import os

# 显示当前目录下的所有文件名称,并存储到列表中
print(os.listdir())

# getcwd() 查看当前文件路径  绝对路径
print(os.getcwd())
创建多个文件
for i in range(1,11):
    with open('素材/文件自动化素材{}.mp4'.format(i),'wb'):
        pass