函数相关

2019-04-20 08:52:24来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

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 ,字符串所有方法的返回值基本都会返回新值***

 


原文链接:https://www.cnblogs.com/wenxin1120/p/10738158.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Django | 页面数据的缓存与使用

下一篇:day06