zoukankan      html  css  js  c++  java
  • 我的Python升级打怪之路【三】:Python函数

    函数

    在函数之前,我们一直遵循者:面向过程编程,即:根据业务逻辑从上到下实现功能,开发过程中最常见的就是粘贴复制。代码就没有重复利用率。

    例如:有好多的重复的代码

    1 if 条件:
    2     发送指令
    3     接收结果
    4 elif 条件:
    5     发送指令
    6     接收结果
    7 elif 条件:
    8     发送指令
    9     接收结果

    如果我们将重复的代码提取出来

    例如:代码简洁多了

     1 def 一条操作(参数):
     2     发送指令
     3     接收结果
     4 
     5 if 条件:
     6     一条操作
     7 elif 条件:
     8     一条操作
     9 elif 条件:
    10     一条操作

    对于以上两种方式,第二种明显要优于第一种,重用性可读性大大增加。这就是函数式编程和面向过程编程的区别

    • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅仅调用函数即可。
    • 面向对象:对函数进行分类和封装。
    • 函数式编程最重要的是增强代码的重用性和可读性

    1.函数的定义和使用

    1.定义:

    1 def 函数名(参数):
    2 
    3     函数体
    4     
    5     返回值(默认不写,返回值为空)

    函数的定义要点:

    • def:定义函数的关键字
    • 函数名:之后会根据函数名对函数进行调用
    • 函数体:函数中进行一系列的逻辑计算
    • 参数:为函数提供数据
    • 返回值:当函数执行完毕后,用于给调用者返回数据,默认为空

    2.参数:

    为什么要有参数呢?

    1 def 操作(参数):
    2     发送一条指令('ls')
    3 
    4 if 条件:
    5     操作()
    6 elif 条件:
    7     操作()
    8 
    9 # 不管是if还是elif,发送的都是同一条指令ls
    无参数例子
    1 def 函数(参数):
    2     执行指令(参数)
    3 
    4 if 条件:
    5     函数(ls)
    6 elif 条件:
    7     函数(pwd)
    有参数的例子

    函数中有三种不同的参数:

    • 普通参数
    • 默认参数
    • 动态参数
    1 #************定义****************
    2 #name 叫做函数func的形式参数,简称:形参
    3 def func(name):
    4     print(name)
    5 
    6 #************调用****************
    7 # 'nullnull'叫做func的实际参数,简称:实参
    8 func('nullnull')
    普通参数
    1 def func(name,age=20)
    2     print(name,age)
    3 
    4 # 指定参数
    5 func('nullnull',18)
    6 func(name="nullnull",age=20)
    7 
    8 #使用默认参数
    9 func("null")
    默认参数
    1 def func(*args):
    2     print(args)
    3 
    4 #执行方式一
    5 func(1,2,3,4,5,6,7)
    6 
    7 #执行方式二
    8 li = [1,2,3,4,5,6,7]
    9 func(*li)
    动态参数args
    1 def func(**kwargs):
    2     print(kwargs)
    3 
    4 # 执行方式一
    5 func(name="nullnull",age=18)
    6 
    7 # 执行方式二
    8 dic = {'name':'nullnull','age':18}
    9 func(**dic)
    动态参数kwargs

    特别的,普通参数,默认参数,动态参数是有顺序要求的

    1 def func(普通参数,默认参数,*args,**kwargs):
    2     pass
    参数的顺序要求

    Python的内置函数

    函数详解

     Lambda表达式

     对于简单的函数,有一种简便的表示方式,即:lambda表达式

     1 #*************普通函数**************
     2 #定义函数
     3 def func(arg):
     4     print(arg)
     5 
     6 #执行函数
     7 func('null')
     8 
     9 
    10 #*************lambda***************
    11 #定义函数(lambda表达式)
    12 my_lambda = lambda arg : arg + 1
    13 
    14 #执行函数
    15 my_lambda(0)

    递归

    利用Python编写斐波那契数列:

      斐波那契数列:0,1,1,2,3,5,8,13......

    1 def func(arg1,arg2):
    2     if arg1 == 0:
    3         print(arg1,arg2)
    4     arg3 = arg1 + arg2
    5     print(arg3)
    6     func(arg2,arg3)
    7 
    8 func(0,1)

    补充:三元运算符 

     三元运算(三目运算),是对简单的条件语句的缩写

    1 result = 值1 if 条件 else 值2
    2 
    3 #如果条件成立,那么result = 值1,否则result = 值2

    补充:深浅拷贝

     对于数字 字符串而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址

     1 import copy
     2 
     3 n1 = 1
     4 
     5 #查看n的内存地址
     6 print(id(n1))
     7 
     8 #将n1赋值给n2
     9 n2 = n1
    10 print(id(n2))
    11 
    12 #浅拷贝
    13 n3 = copy.copy(n1)
    14 print(id(n3))
    15 
    16 #深拷贝
    17 n4 = copy.deepcopy(n1)
    18 print(id(n4))

    你会神奇的发现打印的都是相同的

    对于字典、元组、列表 而言,进行赋值、浅拷贝、深拷贝时,其内存地址的变化时不一样的

     1.赋值

    1 n1 = {"k1":'nullnull',"k2":1,"k3":['hello','python']}
    2 
    3 n2 = n1

     

    2.浅拷贝

    浅拷贝,在内存中额外创建 第一层 的数据

    1 import copy
    2 
    3 n1 = {"k1":"nullnull","k2":1,"k3":["hello","python"]}
    4 
    5 n2 = copy.copy(n1)

    3.深拷贝

    深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:Python内部对字符串和数字的优化)

    1 import copy
    2 
    3 n1 = {"k1":"nullnull","k2":1,"k3":["hello","python"]}
    4 
    5 n2 = copy.deepcopy(n1)

  • 相关阅读:
    JS之Cookie、localStorage与sessionStorage
    ES6之数组的扩展
    iView Form表单与DatePicker日期选择器
    自己实现LinkedList(非所有功能测试通过)
    自己实现基于数组的ArrayList的基本api
    Leetcode 448. 找到所有数组中消失的数字
    第六届福建省大学生程序设计竞赛不完全题解
    2016多校联合训练contest4 1012Bubble Sort
    2016 Multi-University Training Contest 2 第一题Acperience
    HDU 5726 GCD (2016 Multi-University Training Contest 1)
  • 原文地址:https://www.cnblogs.com/smiling-crying/p/9203696.html
Copyright © 2011-2022 走看看