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)

 

原文地址:https://www.cnblogs.com/doraemon548542/p/11176210.html