函数与函数式编程

一.编程模式分为三种:

1.面向对象编程:类----->关键字class

2.面向过程编程:过程----->关键字def,没有return

3.函数式编程:函数----->关键字def,有return返回值(注:函数式编程与我们学习的函数完全不是一回事)

面向过程编程是没有返回值的函数式编程,在python中过程可以看做函数,只是python默认过程没有返回值。

面向过程编程就是把一段段零散的代码通过def定义成一块块代码,需要调用的时候就拿出来使用。

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此任意一个函数,只要输入是确定的,输出就是确定的

python对函数式编程提供部分支持,由于python允许使用变量,所以python不是纯粹的函数式编程语言。

 #!/user/bin/env python
#-*-coding:utf-8 -*-
#Author: qinjiaxi
#函数
def func1():
"""testing1"""
print('in the func1')
return 0
#过程
def func2():
"""testing2"""
print('in the func2')
x = func1()#调用函数
y = func2()#调用过程
print('func1 return: {}'.format(x))#函数有返回值返回定义函数时的0
print('func2 return: {}'.format(y))#过程没有返回值返回None

二.为什么要使用函数

1.避免代码重复(避免代码的重复,把代码封装到函数中,调用时只调用函数)

2.保持一致性(调用函数时)

3.可扩展容易扩展(修改函数时,其他调用函数的地方都跟着变动)

三.函数的返回值

1.返回值个数=0,返回None

2.返回值个数=1,返回object(本身)

3.返回值个数>1,返回tuple(元组)

四.函数为什么要有返回值

返回整个函数的运行结果,根据返回结果进行后面的操作

五.函数的参数

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi #位置参数和关键字参数
def test(x,y):
print(x,y)
test(1,2)#1,2是位置参数,按照位置来传递函数参数,与形参一一对应
test(y = 1, x = 2)#此时y和x是关键字参数,将形参赋值与形参顺序无关
"其中x,y是形参,1、2是实参"
"位置参数和关键字参数共同使用的时候:必须位置参数放在前面,否则报错" #默认参数
def test1(x, y =2):
print(x,y)
test1(1)
"默认参数:在定义函数的时候给形参赋值" \
"默认参数的特点:调用函数的时候,默认参数非必须传递,如果传递就修改之前的赋值" \
"默认参数的用途:1.提前固定值,默认安装值 2.连接数据库时使用默认参数可以固定端口号" \ #参数组(也叫收集参数)
#传递多个参数
def test2(*args):
print(args)
test2(1,2,3,4,5)#接受多个实参,将参数传进去得到一个元组
test2(*[1,2,3,4,5])# args = tuple([1,2,3,4,5]) def test3(x, *args):
print(x)
print(args)
test3(1,2,3,4,5)#将1传给1,其他的以元组的形式传递给args #传递多个字典参数
def test4(**kwargs):
print(kwargs)
test4(name = 'qinlang', age = 3)#接收关键字参数变成字典
test4(**{'name': 'qinlang', 'age': ''})#kwargs = dict({'name':'qinlang', 'age':'3'})
"功能:把N个关键字参数,转换为字典的方式" def test5(name,**kwargs):
print(name)
print(kwargs)
test5('秦朗', x = 111 ,y =222, age = 8)#先接受位置参数,然后把关键字参数变成字典 def test6(name, age = 3, **kwargs):
print(name)
print(age)
print(kwargs)
test6('秦朗',hobby = 'play',age = 3.5)#先接受位置参数,然后接受默认参数,最后将关键字参数变成字典 "总结:*args接受的是位置参数,如果调用函数的时候不传递则返回一个空元组"
" *kwargs接受的是关键字参数,如果调用函数的时候不传递则返回一个空字典"
" 默认参数在调用的时候可以写可以不写,如果写的话有两种方式一是在固定位置写值、二是以关键字参数传递"
" 最后强调,位置参数一定得放在关键字参数的后面"

ql的python学习之路-day7的更多相关文章

  1. python学习之路-day7

    本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 面向对象高级语法部分 静态方法                             ...

  2. ql的python学习之路-day15

    前言:本节主要讲解的是文件路径 在实际的软件开发中会设计一个项目的文件目录,按照执行包bin.配置包config.核心包core等来设计,在执行包里面要运行核心包里的主程序mian,由于不在同一级的目 ...

  3. ql的python学习之路-day14

    前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳  2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...

  4. ql的python学习之路-day13

    前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...

  5. ql的python学习之路-day12

    前言:这一节主要学习json和pickle 背景: 相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级:当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪, ...

  6. ql的python学习之路-day11

    前言:本节主要学习python内置的方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:qinjiaxi from collections ...

  7. ql的python学习之路-day10

    前言:本节主要讲解迭代器和生成器 迭代器&生成器 一.生成器(generator) 循环占用大部分的容量内存,如果只需要循环前面的几个结果那怎么样做呢,在python中有一种一边循环一边计算的 ...

  8. ql的python学习之路-day9

    前言:本节主要学习装饰器 一.装饰器 定义:本质上是个函数,用来装饰其他函数:(就是为其他函数添加附加功能) 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 以上两点可以总 ...

  9. ql的python学习之路-day8

    前言:本节主要学习的是函数的全局变量和局部变量以及递归 一.全局变量和局部变量 定义在函数外并且在函数头部的变量,叫做全局变量,全局变量在整个代码中都生效. 局部变量只在函数里生效,这个函数就叫做这个 ...

随机推荐

  1. DFS(单词方阵)

    思路: 先把地图二维字符数组存进去之后,遍历寻找到一个‘y’,然后我们可以设置一个八个方向的方向数组,让‘y’的坐标,遍历加上方向坐标,找到’i‘然后沿着这个方向,dfs下去,每次寻找到正确的,然后建 ...

  2. Next.js 7发布,构建速度提升40%

    Next.js团队发布了其开源React框架的7版本.该版本的Next.js主要是改善整体的开发体验,包括启动速度提升57%.开发时的构建速度提升40%.改进错误报告和WebAssembly支持. \ ...

  3. Python-四则运算-蔡晓晴,杜婷萱

    github链接:https://github.com/Amy-CC/Arithmetic-Operation 一.需求 1.使用-n 参数控制生成题目的个数 2.使用-r 参数控制题目中数值(自然数 ...

  4. Netty(二):数据在ChannelPipeline中的流经

    本文目的:测试数据在ChannelPipeline中的流经顺序及状态. 先看本文的测试代码: AdditionalInBoundHandler:入站处理器,不做任何处理,只是在响应读事件时打印用来观察 ...

  5. Vue项目中设置每个单页面的标题

    两种实现方法,第一种方法引入插件,第二种为编程方式实现(推荐) 首先在路由文件index.js中给每个单页面路由添加title routes: [{     path: '/',     name: ...

  6. puppet报告系统Dashboard部署及配置详解

    Puppet Dasshboard是由支持Puppet开发的公司Puppetlabs创建的,是Ruby on Rails程序.可以作为一个ENC(外部节点分类器)以及一个报告工具,并且正在逐渐成为一个 ...

  7. NetCore项目实战篇02---全局异常处理

    在 .netcore中可以自定义自己的异常类型,步骤如下: 1.自定义自己的异常类型UserOperationException 并继承自Exception public class UserOper ...

  8. 写代码?程序猿?你不能不懂的八大排序算法的Python实现

    信息获取后通常需要进行处理,处理后的信息其目的是便于人们的应用.信息处理方法有多种,通常由数据的排序,查找,插入,删除等操作.本章介绍几种简单的数据排序算法和高效的排序算法. 本章主要涉及到的知识点有 ...

  9. CF906D Power Tower

    扩展欧拉定理 CF906D Power Tower 洛谷交的第二个黑题 题意 给出一个序列\(w-1,w_2,\cdots,w_n\),以及\(q\)个询问 每个询问给出\(l,r\),求: \[w_ ...

  10. python(re 模块)

    1.re.match() 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. group() 以str形式返回对象中match的元素 start() 返回 ...