欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

函数相关

程序员文章站 2022-10-05 21:17:43
一:三元计算(三目计算) 二:函数的基本认识 1.函数式编程: - 本质:将N行代码拿到别处并给他起个别名,以后通过名字就可以找到这行代码并执行 - 场景:1.代码重复执行 2.代码量特别多超过一屏,可以通过函数进行代码的分割 2.函数的基本结构 3.函数参数: 定义一个函数:给了函数一个名称,指定 ......

一:三元计算(三目计算)

if 条件语句的简写

v= 前面 if 条件 else 后面

#条件成立得到前面的值,否则得到后面的值  

 

二:函数的基本认识

1.函数式编程:

  - 本质:将n行代码拿到别处并给他起个别名,以后通过名字就可以找到这行代码并执行

  - 场景:1.代码重复执行 2.代码量特别多超过一屏,可以通过函数进行代码的分割

2.函数的基本结构

#函数的定义

def 函数名(参数):
     函数体
函数名()  #执行函数

#函数如果不被调用,则内部代码永远不会执行

 

3.函数参数:

定义一个函数:给了函数一个名称,指定了函数里包含的参数和代码块结构

这个函数的基本结构完成以后,可以通过另一个函数调用执行,也可以直接从python命令提示符执行

示例:打印某个列表的元素
def get_list_first_data(aaa): # aaa叫形式参数(形参)
    v = [11,22,33,44]
    print(v[aaa]) 
    
get_list_first_data(1) # 调用函数时传递叫:实际参数(实参)

 

4.返回值(return)

  1.函数没有返回值时,默认返回none

  2.函数执行过程中遇到return时,则终止,下面代码永远不会执行

  3.可以返回任意类型

#特殊:

def func():
    return 1,2,3
result = func()
print(result)    

#返回的元组 (1,2,3)
综合示例:
   # 让用户输入一段字符串,计算字符串中有多少a字符的个数。有多少个就在文件a.txt中写多少个“嘻嘻嘻”。
def get_char_count(data):
  sum_counter = 0
  for i in data:
    if i == 'a':
      sum_counter += 1        
  return sum_counter
  def write_file(line):
    if len(line) == 0:
      return false  # 函数执行过程中,一旦遇到return,则停止函数的执行。
    with open('a.txt',mode='w',encoding='utf-8') as f:
      f.write(line)
    return true 
content = input('请输入:')
counter = get_char_count(content)
write_data = "嘻嘻嘻" * counter 
status = write_file(write_data)
if status:
    print('写入成功')
else:
    print('写入失败')

 

三:参数相关

1.位置参数:(调用函数并传入函数)

函数相关

2.关键字参数:

def func(num1,num2)
    print(num1,num2)
func(num1=1,num2=2)  #赋值为关键字参数

 

************注意: 位置参数可以和关键字参数混合使用,但位置参数一定要在关键字参数前面***********

3.默认参数(默认参数推荐使用不可变类型,慎用可变类型)

def func(a1,a2,a3=1,a4=2)  #a3,a4为默认参数
    print(a1,a2,a3,a4)
 
func(11,22)  #a3和a4 已有默认参数,所以不必再定义参数
func(11,22,a3=10,a4=100)  #再次定义参数,覆盖前面的参数

 

******当默认参数为可变类型时 (有坑)*******

#注意一
def func(a,b=[]):
    b.append(a)
    return b
v1 = func(1)
v2 = func(2,[11,22])
v3 = func(3)

print(v1,v2,v3)
#[1,3] [11,22,3]  [1,3]

#注意二:
def func(a,b=[]):
    b.append(a)
    print(b)
    
func(1)   #[1]
func(2,[11,22])  #[11,22,2]
func(3)    #[1,3]

 

4.万能参数(打散)

  - *args:可以接收任意个数的位置参数,并将其转换成元组

    - 调用函数无* 

def func(*args):
    print(args)
 
func(1,2,3)  #打印func后内容,里面可以是列表集合等

    - 调用函数有*

def func(*args):
    print(args)
func(*(1,2,3,4))  
# 不管里面的内容是列表/集合都打印成元组,当里面内容为字典时,打印内容为字典的key(键)

  - **kwargs :可以接收任意个数的关键字参数,并将其转换成字典

    - 调用函数无**

def func(**kwages): 
    print(kwages)
func(k1=1,k2=2)  #{'k1': 1, 'k2': 2}

    - 调用函数有**

def func(**kwages):
    print(kwages)
func(**{'k1':1,'k2':2})  #后面内容只能是字典

 

四:作用域&函数嵌套

1.python中

    - py文件:全局作用域

    - 函数 :  局部作用域 , 一个函数就是一个作用域

  - 作用域查找规则:优先在自己的作用域查找数据,自己没有就去上一级查找,然后上上级,直到全局,全局没有就报错

#示例1:
 x = 10
 def func():
     x = 8
     print(x)  # 8
     def x1():
         print(x)  # 9
     x = 9
     x1()
     x = 10
     print(x)  # 10
 func()

#示例2:
 x = 10
 def func():
     x = 8
     print(x)  # 8
     def x1():
         print(x) # 8
     x1()
     x = 9
     x1()  # 9
     x = 10
     print(x) # 10
 func()

 2.子作用域中只能找到父级中的值,默认无法重新为父级中的变量进行赋值..(global和nonlocal可以强制做)

  - global :找到并改变全局中的变量

name = "老男孩"
def func():
    name = 'alex'
    def inner():
        global name
        name = 999
    inner()
    print(name)  # 'alex'
func()
print(name)  # 999

  - nonlocal : 找到并改变上一级中的变量

name = "老男孩"
def func():
    name = 'alex'
    def inner():
        nonlocal name 
        name = 999
    inner()
    print(name)  # 999
func()
print(name)  # "老男孩"

  *****要求:全局变量以后必须大写*****

 

 五:函数的其他应用

1.函数名当做变量来使用

#注意:不带括号指向的是内存地址,带括号是调用函数

def func():
    return 123
func_list1 = [func,func,func]
func_list2 = [func(),func(),func()]
print(func_list1)  # 打印的是内存地址
print(func_list2)  #打印的是 : [123,123,123]  调用函数
info = {
    'k1':func,  #内存地址
    'k2':func(),  # 调用函数
}
print(info)

2.函数可以当做参数进行传递

函数相关

结果 : 666 none none 

 3.函数可以作为返回值

函数相关

结果是 : 0  1  4

4.闭包

  概念:为函数创建一块区域并为其维护自己的数据,以后执行时方便调用

函数相关

5.递归 : 函数自己调自己

#递归打印斐波那契数
def func(a,b):
    # 1
    # 1
    # 2
    # 3 
    # 5 
    print(b)   #[0,1,1,2,3,5,8,11...]
    func(b,a+b)
    
func(0,1)   

 

 六:lambda 表达式(也叫匿名函数)

用于表示简单的函数

函数相关

***注意:列表所有方法的返回值基本都为none ,字符串所有方法的返回值基本都会返回新值***