doraemon的python 函数(整理了下笔记)感觉自己棒棒哒
第五章 函数
5.1 三元运算
v = 前面的值 if 条件 else 后面的值
#等同于
if 条件:
v = 前面的值
else:
v = 后面的值
例如: v = val1 if 5>3 else val2
示例
#让用户输入值,如果是整数,则转换成整数,否则值为None
data = input('>>>')
v = int(data) if data.isdecimal() else None
5.2 函数
用一个函数名,去代替整个函数的代码,在运行中值需要调用函数名就可以,方便简洁。
注意:函数只有被调用后才会运行,仅仅放在代码中是不会运行的
5.2.1函数式编程
def get_data():
v = [11,22,11,333,444]
print(v)
get_data()
对于函数编程:
-
本质:将一段代码拿到别处起个名字,以后可以通过名字来调用这段代码
-
场景:
-
代码重复执行
-
代码量特别多,超过一屏幕,不方便看
-
5.2.2 函数的基本结构
#函数的基本结构
def 函数名():
#函数内容
pass
#函数的执行
函数名()
def get_list():
v = [11,22,33,44]
li = []
for i in v:
li.append(i)
print(li)
get_list()
#注意:函数不被调用,内部代码永远不会执行
5.3 参数
def get_data(a1): #a1叫做形式参数
v = [11,22,11,333,444]
print(v[a1])
get_data(0) #0/1/2 叫实际参数
get_data(1)
get_data(2)
示例
#写出一个函数,计算列表中所有元素的和
def get_list_sum(a1):
data = 0
for i in a1:
data += i
print(data)
get_list_sum([11,22,44,66])
5.3.1参数的基本知识
-
任意个数
-
任意类型
def func(a1,a2,a3)
print(a1,a2,a3)
func(1,"asdf",True)
5.3.2 位置传参
def func(a1,a2):
print(a1,a2)
func(1,3)
#上面的a1、a2与下面的1、3是根据位置来对应的
5.3.3 关键字传参
def func(a1,a2):
print(a1,a2)
func(a1=1,a2=3)
#关键字传参和位置传参可以一起用,但有原则:
#位置传参一定要在关键字传参的前面
def func1(a1, a2, a3):
print(a1, a2, a3)
# func(1, 2, a3=9)
# func(1, a2=2, a3=9)
# func(a1=1, a2=2, a3=9)
# func(a1=1, 2,3) # 错误
5.3.4 默认传参
#1.在传形式参数的时候,就将其中的一个形式参数赋值
#2.如果执行函数时,没有a3或者a4,则默认执行原来的值
def func(a1,a2,a3=9,a4=10):
print(a1,a2,a3,a4)
func(11,22)
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100)
5.3.5万能参数
-
*args
-
可以接受任意个数的位置参数,并将参数转换成元组
#调用函数的时候没有有*
def func(*args):
print(args)
func(1,2,3,4)#调用函数的时候有*
def func(*args):
print(args)
func(*(1,2,3,4))
func(*[1,2,3,4]) -
-
**kwargs
-
可以接受任意个数的关键字参数,并将参数转换成字典。
#调用函数的时候没有*
def func(**kwargs):
print(kwargs)
func(k1=1,k2=9)#电泳函数的室友有**
def func(**kwargs):
print(kwargs)
func(**{k1:1,k2:9})
# kwargs={'k1':1,'k2':9} -
5.3.6 综合运用 *args + **kwargs
def func(*args,**kwargs):
print(args,kwargs)
# func(1,2,3,4,5,k1=2,k5=9,k19=999)
5.4 返回值
-
函数没有返回值,默认返回:None
-
数内部执行过程中遇到return,就终止。
def func():
内容
return 9 #默认的返回值是None
func('uhkn')
#示例:
#让用户输入一点字符串,计算字符串中有多少A字符。有多少个就在文件a.txt中学多少个"刘佳"
def sum_A(data):
sum = 0
for i in data:
if i == "A":
sum += 1
return sum
def write_file(line):
with open("a.txt",mode = "w",encoding = "utf-8") as file
flie.write(line)
content = input("请输入:")
v = sum_A(content)
line = "刘佳" * v
def write_file(line):
5.5 作用域
-
作用域理解
#示例
a = 1
def s1():
x1 = 666
print(x1)
print(a)
print(b)
b = 2
print(a)
s1()
a = 88888
def s2():
print(a,b)
s1()
s2()
-
总结:
-
一个函数就是一个局部作用域,局部作用域在全局作用域中
-
作用域中数据查找的规则:优先在自己的作用域找,自己没有就不断往父级找,直到找到为止
-
查找数据只能在函数调用命令之前找,函数不被调用是不会执行的,记住一定是在执行命令之前找
-
# x = 10
# def func():
# x = 9
# print(x)
# def x1():
# x = 999
# print(x)
#
# func()
# x = 10
# def func():
# x = 9
# print(x)
# def x1():
# x = 999
# print(x)
# x1()
#
# func()
# x = 10
# def func():
# x = 9
# print(x)
# def x1():
# x = 999
# print(x)
# print(x)
# x1()
#
# func()
# x = 10
# def func():
# x = 8
# print(x)
# def x1():
# x = 999
# print(x)
# x1()
# print(x)
#
# func()
# x = 10
# def func():
# x = 8
# print(x)
# def x1():
# print(x)
# x1()
# print(x)
#
# func()
# x = 10
# def func():
# x = 8
# print(x)
# def x1():
# print(x)
# x = 9
# x1()
# x = 10
# print(x)
#
# func()
#
# x = 10
# def func():
# x = 8
# print(x)
# def x1():
# print(x)
#
# x1()
# x = 9
# x1()
# x = 10
# print(x)
#
# func()
-
子作用域只能找到父级中的值,默认无法为父级的变量进行赋值(global/nonlocal可以强制做)
name = ["liujai",'liudanni']
def func():
global name
name = '我'
func()
print(name)