1.OOP 面向对象编程,万物皆对象,以class为主,抽象化

2.POP 面向过程变成,万事皆过程,def定义过程

3.函数式编程,将某种功能封装起来,用的时候直接调用函数名,def定义函数,也叫function/方法/过程/子程序

函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用其函数名即可 --Alex

特性:

  1. 减少重复代码
  2. 使程序变得可扩展
  3. 使程序变得易维护

语法定义:

  1. def 函数名():
  2. 函数执行语句
  • 不带参数的函数调用
  1. >>> def func_name1():
  2. ... print("hello world")
  3. ...
  4. >>> func_name1()
  5. hello world
  • 带1个参数的函数调用
  1. >>> def func_name1(name):
  2. ... print("my name is :",name)
  3. ...
  4. >>> func_name1('alex')
  5. my name is : alex
  6. >>> name = 'oldboy'
  7. >>> func_name1(name)
  8. my name is : oldboy
  9. >>>
  • 带2个参数的函数调用
  • def定义函数的时候,括号里面的变量叫形参,引用内存空间
  • 调用函数的时候,括号里面的变量叫实参,内存数据
  • 形如(variable1,variable2),叫位置参数
  • 形如(variable1=value1,variable2=value2),叫关键字参数
  • 关键字参数一定要在位置参数后面
  • 没特别指明,形参和实参必须一一对应,多一个少一个都报错
  1. >>> def func_name2(a,b):
  2. ... c=a*b
  3. ... print(c)
  4. ...
  5. >>> func_name2(2,3)
  6. 6
  7. >>> x,y=5,5
  8. >>> func_name2(x,y)
  9. 25
  10. >>> func_name2(a=2,b=3)
  11. 6
  12. >>> func_name2(a=2,5)
  13. File "<stdin>", line 1
  14. SyntaxError: positional argument follows keyword argument
  15. >>> func_name2(2,b=5)
  16. 10
    >>> func_name2(a=2,b=3,c=4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: func_name2() got an unexpected keyword argument 'c'
    >>> func_name2(a=2)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: func_name2() missing 1 required positional argument: 'b'
  • 函数返回值,遇到return语句将结束函数
  1. >>> def with_return(a,b):
  2. ... return(a * b)
  3. ... return(a + b)
  4. ...
  5. >>> def without_return(a,b):
  6. ... print(a*b)
  7. ... print(a+b)
  8. ...
  9. >>> with_return(2,3)
  10. 6
  11. >>> without_return(2,3)
  12. 6
  13. 5
  14. >>> x=with_return(2,3)
  15. >>> print(x)
  16. 6
  17. >>> y= without_return(2,3)
  18. 6
  19. 5
  20. >>> print(y)
  21. None
  22. >>>
  • 全局变量与局部变量

    •   函数体外定义的变量称为全局变量,在函数体内也生效,前提是先定义全局变量,后定义函数
    •   函数体内定义的变量称为局部变量,只在当前函数体内生效
  1. name,age = 'alex',18
  2. print(name,age)
  3. def func_name0():
  4. name = 'oldboy'
  5. age = 100
  6. print(name,age)
  7. print(age+1)
  8. func_name0()
  9. print(name,age)
  10.  
  11. alex 18
  12. oldboy 100
  13. 101
  14. alex 18
  • 非固定参数,当传入的参数不确定个数的时候

    • 非固定参数*args,传入的参数变成元组,元组可为空
    • 非固定参数**kwargs,传入的参数变成字典,
    • *args与**kwargs可同时使用
  1. >>> def func_name5(name,age,*args):
  2. ... print(name,age,args)
  3. ...
  4. >>> func_name5('alex',18)
  5. alex 18 ()
  6. >>> func_name5('alex',18,'oldboy')
  7. alex 18 ('oldboy',)
  8. >>> func_name5('alex',18,'oldboy',100)
  9. alex 18 ('oldboy', 100)
  10. >>> func_name5('alex',18,'oldboy',100,[1,2])
  11. alex 18 ('oldboy', 100, [1, 2])
  12. >>> func_name5('alex',18,'oldboy',100,[1,2],{'key1':'v1','k2':'v2'})
  13. alex 18 ('oldboy', 100, [1, 2], {'key1': 'v1', 'k2': 'v2'})
  1. >>> def func_name6(name,age,**kwargs):
  2. ... print(name,age,kwargs)
  3. ...
  4. >>> func_name6('alex',18)
  5. alex 18 {}
  6. >>> func_name6('alex',18,'oldboy')
  7. Traceback (most recent call last):
  8. File "<stdin>", line 1, in <module>
  9. TypeError: func_name6() takes 2 positional arguments but 3 were given
  10. >>> func_name6('alex',18,oldboy=100)
  11. alex 18 {'oldboy': 100}
  12. >>> func_name6('alex',18,oldboy=100,salary=1,address='beijing')
  13. alex 18 {'address': 'beijing', 'salary': 1, 'oldboy': 100}
  1. >>> def func_name7(name,age,*args,**kwargs):
  2. ... print(name,age,args,kwargs)
  3. ...
  4. >>> func_name7('yzw',28,18,'man',address='guanghzou',mail='xxx@com.cn')
  5. yzw 28 (18, 'man') {'address': 'guanghzou', 'mail': 'xxx@com.cn'}
  6. >>> func_name7('zvy',18)
  7. zvy 18 () {}
  • 嵌套函数,函数中调用函数,但是只能调用同级的函数,不能隔级调用
  • 递归函数
    • 必须有一个明确的结束条件
    • 每递归一次,问题规模比上一次都应有减少
    • 效率不高,下面这个越到后面效率越低
  1. >>> list1=[,]
  2. >>> for i in range(,):
  3. ... list1.append(list1[i-]+list1[i-])
  4. ...
  5. >>> print(list1)
  6. [, , , , , , , , , ]
  7. >>> def func_fib(x):
  8. ... if x == :
  9. ... return
  10. ... elif x == or x == :
  11. ... return
  12. ... return func_fib(x-)+func_fib(x-)
  13. ...
  14. >>> func_fib()
  • 匿名函数--link:
  • 高阶函数,变量指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
  1. >>> def func_high(a,b,f):
  2. ... return f(a),f(b)
  3. ...
  4. >>> num1=10
  5. >>> str1='hello'
  6. >>> func_high(num1,str1,id)
  7. (10911456, 140199339463320)

python3.x 基础三:函数的更多相关文章

  1. Python基础三. 函数、lambda、filter、map、reduce

    一.概述 函数, 就是用一些语句组织起来实现一组特定的功能, 用来重复调用. 函数的作用及意义:最大化的重用代码和最小化的代码冗余以及对流程的分解. Python中有哪些函数: 内建的函数 第三方模块 ...

  2. python3.x 基础三:装饰器

    装饰器:本质是函数,用于装饰其他函数,在不改变其他函数的调用和代码的前提下,增加新功能 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 3.装饰函数对于被装饰函数透明 参考如 ...

  3. MySQL 基础三 函数(聚合、字符串、时间、条件判断)

    1.聚合 其它:GROUP_CONCAT.avg.sum.count.max.min SELECT typeid,GROUP_CONCAT(goodsname) FROM `goods` GROUP ...

  4. python3.x 基础三:字符集问题

    总结了一张表,更详细信息百度百科: 序号 年份 编码 标准协会 特点 二进制长度 字符长度 表现 1 1967 ASCII 美国国家标准学会(American National Standard In ...

  5. python3.x 基础三:文件IO

    打开文件的两种方式 1.直接打开文件并赋值给变量,打开后得到操作句柄,但不会自动关闭 file = open('文件名‘,'打开模式',’编码‘) fd = open('../config/file1 ...

  6. python3.x 基础三:set集合

    集合,set(),记住: 1个特点:去重,把列表变成集合,达到自动去重操作,无序 5个关系:测试两个列表的交差并子反向差集 方法: |  add(...) 常用,已存在元素去重不生效 |      A ...

  7. Python3入门(三)——Python基础语法

    一.基本语法 1.行和缩进 Python中,不使用括号来表示代码的类和函数定义块或流程控制. 代码块是由行缩进,缩进位的数目是可变的,但是在块中的所有语句必须缩进相同的量. 如下所示: a = 100 ...

  8. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  9. day 53-1 Django基础三之视图函数

    Django基础三之视图函数   本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...

随机推荐

  1. Nginx+Fastdfs

    注: 在配置时,使用非root用户配置 fdfs/fdfs 1.    集群部署 1.1.    准备 创建目录:本文档中所有内容安装到/fdfs目录 [fdfs@5861be93b5b0 /]$mk ...

  2. python学习23之标准库

    '''''''''标准库1.datetime 日期时间模块存在于Lib/datetime.py文件内'''from datetime import datetime,date,time #from d ...

  3. chcp437 转换英语,在西班牙语系统中无效

    https://social.technet.microsoft.com/Forums/en-US/9c772011-5094-4df0-bf73-7140bf91673b/chcp-command- ...

  4. Scala的自定义类型标记

    Scala的自定义类型标记 Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry martini-好像黑夜中的萤火虫,那么耀眼,那么出众. 好了言归正传,这一篇文章我们会讲一下S ...

  5. 【三剑客】sed命令

    1. Sed 简介 sed 是Stream Editor(流编辑器)的缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行.   sed 是一种新型的,非交互式的编辑器. 它能执 ...

  6. 模块sys,os

    Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的. 在Pyt ...

  7. Merge_Sort

    public class Merge_Sort { public static void merge(int a[],int n){ int source; //合并之前数组的大小 int targe ...

  8. redis系列之1----redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  9. Coursera课程笔记----计算导论与C语言基础----Week 9

    C语言中的控制成分(Week 9) 计算机程序的基本结构 任何具有单入口单出口的程序,都可以用顺序结构.分支结构.循环结构来表达 分支语句 在执行if语句前,先对表达式求解 if()内可以是任意的数值 ...

  10. 心路历程-安装Docker

    心路历程-安装Docker 本机环境 Windows10 激活HyperV功能 新建CentOS虚拟机 centos docker安装 由于是新的虚拟机,所以没有docker旧版本的问题,不需要卸载旧 ...