Python之路---初识函数️

程序员三大美德:

  1. 懒惰

因为一直致力于减少工作的总工作量。

  1. 缺乏耐性

因为一旦让你去做本该计算机完成的事,你将会怒不可遏。

  1. 傲慢

因为被荣誉感冲晕头的你会把程序写得让谁都挑不出毛病来。

大家好, 现在让我们一起来学习一下函数

Why-为什么要使用函数?

现在我们需要计算一个字符串的长度,我们可以直接使用len()方法:

  1. num = len('hello')

但是如果我们不用len方法,怎么实现这个需求?其实也不难:

  1. s = 'hello'
  2. length = 0
  3. for i in s:
  4. length += 1
  5. print(length)

好了,功能实现了,然后又有一个需求(产品经理日常加需求),要计算另一个字符串的长度---“world”。

于是,本着程序员三大美德,我们使用最强大的快捷键---Ctrl+c , Ctrl+v:

  1. s1 = 'world'
  2. length = 0
  3. for i in s1:
  4. length += 1
  5. print(length)

这样确实可以实现需求,但是总感觉不是那么完美,为什么呢?

首先,之前我只需要执行len方法就可以拿到一个字符串的长度,而现在为了实现相同功能,我们需要把相同的代码写很多遍 --- 代码冗余

其次,刚刚的代码不是那么容易读懂 ---- 可读性差

我们就想,要是我们能像使用len一样使用我们这一大段“计算长度”的代码就好了。这种感觉有点像给这段代码起了一个名字,等我们用到的时候直接喊名字就能执行这段代码就行。

函数定义与调用

现在教大家一个技能,把代码装起来:

  1. def mylen():
  2. """计算字符串长度"""
  3. s = 'hello'
  4. length = 0
  5. for i in s:
  6. length += 1
  7. print(length)

来分析下这段代码:

​ 其实除了def这一行和后面的缩进,其它的和前面的代码是一样的。

​ 现在执行以下,你会发现啥也没发生!

​ 因为这里我们只是把代码装起来了,还不会往外拿,拿应该怎么拿出来呢?

  1. mylen()

这就是代码取出来的过程。

  1. # 定义函数
  2. def mylen():
  3. """计算字符串长度"""
  4. s = 'hello'
  5. length = 0
  6. for i in s:
  7. length += 1
  8. print(length)
  9. # 调用函数
  10. mylen()

总结:

定义:

  • def关键字开头,空格后接函数名称圆括号(),最后还有一个“:”

  • 函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

  • 括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!

  • 注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

    调用: 就是 函数名() 要记得加上括号

函数返回值

前面我们写了一个函数,这个函数可以帮助我们计算字符串的长度,并且把结果打印出来。但是,这和我们的len方法还不是太一样。以前我们调用len方法会得到一个值,我们可以用一个变量来接收这个值。

  1. str_len = len('hello')

那么我们写的函数能做到吗?

  1. # 定义函数
  2. def mylen():
  3. """计算字符串长度"""
  4. s = 'hello'
  5. length = 0
  6. for i in s:
  7. length += 1
  8. print(length)
  9. # 调用函数
  10. str_len = mylen()
  11. print('str_len : %s'%str_len)

执行代码,获得的输出结果是str_len值为None,这说明什么也没返回

那么应该怎么让他有返回值呢?

return

  1. # 定义函数
  2. def mylen():
  3. """计算字符串长度"""
  4. s = 'hello'
  5. length = 0
  6. for i in s:
  7. length += 1
  8. return length
  9. # 调用函数
  10. str_len = mylen()
  11. print('str_len : %s'%str_len)

只需要在函数最后加上一个return的关键字,return后面写上你要返回的值就可以了

return关键字的作用

​ return 是一个关键字,在pycharm里,你会看到它变成蓝色了。

​ 这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

  • 没有返回值:

    • 不写return的情况下,会默认返回一个None
    • 只写return,后面不写其他内容,也会返回None,那么为啥要写呢?return的其他用法,就是一旦遇到return,结束整个函数。  
    • return None:和上面的两种情况一样,我们一般不这样写。
  • 返回一个值:

    ​ 注意:*return和返回值之间要有空格,可以返回任意数据类型的值

  • 返回多个值:

    • 可以返回任意多个、任意数据类型的值

      1. def demo1():
      2. '''返回多个值'''
      3. return 1,2,3,4
      4. def demo2():
      5. '''返回多个任意类型的值'''
      6. return 1,['a','b'],3,4
      7. ret1 = demo1()
      8. print(ret1)
      9. ret2 = demo2()
      10. print(ret2)
    • 返回的多个值会被组织成元组被返回,也可以用多个值来接收

      1. def demo3():
      2. return 1,['a','b'],3,4
      3. #返回多个值,用一个变量接收
      4. ret3 = demo3()
      5. print(ret2)
      6. #返回多个值,用多个变量接收
      7. a,b,c,d = demo3()
      8. print(a,b,c,d)
      9. #用多个值接收返回值:返回几个值,就用几个变量接收
      10. a,b,c,d = demo3()
      11. print(a,b,c,d)

函数的参数

这个函数还是不完美,因为之前我们使用len函数的时候,是可以想计算谁就计算谁的长度,但是我们写的这个函数只能计算“hello”的长度,换一个字符串就需要更改函数内部的变量,这样可不行,那应该怎么办?

带参数的函数:

  1. #函数定义
  2. def mylen(s):
  3. """计算s1的长度"""
  4. length = 0
  5. for i in s:
  6. length = length + 1
  7. return length
  8. #函数调用
  9. str_len = mylen("hello")
  10. print('str_len : %s'%str_len)

我们告诉mylen函数要计算的字符串是谁,这个过程叫做传递参数,简称传参,调用函数

时传递的这个“hello”和定义函数的s就是参数

实参和形参

我们调用函数时传递的这个“hello”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。

定义函数时的s,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。  

传递多个参数

参数可以传递多个,多个参数之间用逗号分割。

  1. def mymax(x,y):
  2. """比较两个数的大小"""
  3. the_max = x if x > y else y
  4. return the_max
  5. the_max = mymax(9,99)
  6. print(the_max)

正是因为需要传递多个参数,所以才有了下面的参数类型

1.位置参数

按照位置传值:

  1. def mymax(x,y):
  2. """比较两个数的大小"""
  3. the_max = x if x > y else y
  4. return the_max
  5. the_max = mymax(9,99)
  6. print(the_max)

2.关键字参数

按照关键字传值:

  1. def mymax(x,y):
  2. """比较两个数的大小"""
  3. the_max = x if x > y else y
  4. return the_max
  5. the_max = mymax(y=99, x=9)
  6. print(the_max)

PS:位置、关键字形式混着用

  1. def mymax(x,y):
  2. """比较两个数的大小"""
  3. the_max = x if x > y else y
  4. return the_max
  5. the_max = mymax(9, y=99)
  6. print(the_max)

正确用法:

  1. 位置参数必须在关键字参数的前面
    2. 对于一个形参只能赋值一次  

3. 默认参数

why?将变化比较小的值设置成默认参数

  1. def info(name, sex='男'):
  2. """打印学生信息"""
  3. print(name, sex)
  4. info('马克')
  5. info('王富贵', '女')

参数陷阱:默认参数是一个可变数据类型

  1. def func(a, l=[]):
  2. l.append(a)
  3. print(l)
  4. func(1)
  5. func(2)
  6. func(3)

4. 动态参数(不定长参数)

  1. *args:按位置传值多余的参数都由args统一接收,保存成一个元组的形式

    1. def mysum(*args):
    2. """求和"""
    3. the_sum = 0
    4. print(args) # 保存成元组形式
    5. print(type(args))
    6. for i in args:
    7. the_sum += i
    8. return the_sum
    9. sum = mysum(10, 20, 30)
    10. print(sum)
  2. **kwargs:按位置传值多余的参数都由kwargs统一接收,保存成一个字典的形式

    1. def stu_info(**kwargs):
    2. print(kwargs) # 保存成字典
    3. print(kwargs['name'])
    4. stu_info(name='不喜欢马赛克的马克', sex='男')

总结

函数:

参数:

08-Python之路---初识函数的更多相关文章

  1. python之路——初识函数

    阅读目录 为什么要用函数 函数的定义与调用 函数的返回值 函数的参数 本章小结 返回顶部 为什么要用函数 现在python届发生了一个大事件,len方法突然不能直接用了... 然后现在有一个需求,让你 ...

  2. python之路--初识函数

    一 . 函数 什么是函数 f(x) = x + 1 y = x + 1 # 函数是对功能或者动作的封装 函数的语法 def 函数名(): 函数体 调用: 函数名() def play(): print ...

  3. python基础之 初识函数&函数进阶

    函数基础部分 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...

  4. Python之路【第五篇】python基础 之初识函数(一)和文件管理

    转载请注明出处http://www.cnblogs.com/wupeiqi/articles/5453708.html 函数 一.背景                                 ...

  5. python爬虫之路——初识函数与控制语句

    介绍python函数的定义与使用方法,介绍Python的常用控制语句:判断和循环 函数: 格式 def   函数名(参数1,参数2): return ‘结果’ 判断语句:就是多选一 二选一: if c ...

  6. Python之路 day3 函数定义 *args及**kwargs

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa import time # def logger(): # time_format ...

  7. 小白的Python之路 day3 函数

    1.函数基本语法及特性 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码 1 2 ...

  8. python之路(九)-函数装饰器

    装饰器 某公司的基础业务平台如下: def f1(): print('这是f1业务平台') def f2(): print('这是f2业务平台') def f3(): print('这是f3业务平台' ...

  9. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...

随机推荐

  1. 关于暴力破解的一些学习笔记(pikachu)

    这几天的笔记都懒得发博客都写在本地了,随缘搬上来 什么是暴力破解 就是在攻击者不知道目标账号密码情况下的,对目标系统的常识性登陆 一般会采用一些工具+特定的字典 来实现高效的连续的尝试性登陆 一个有效 ...

  2. 2019-2020-1 20199328《Linux内核原理与分析》第三周作业

    加载内核 这里可以看出有些东西隔一段时间就会打印出来 查看mymain.c 开头的一些语句不再描述 每10000次循环打印一次 这里还是针对的mymain.c文件,这里我们可以根据自己的计算机对频率进 ...

  3. Spring5参考指南:AspectJ高级编程之Configurable

    文章目录 遇到的问题 @Configurable 原理 重要配置 遇到的问题 前面的文章我们讲到了在Spring中使用Aspect.但是Aspect的都是Spring管理的Bean. 现在有一个问题, ...

  4. 图论--网络流--最大流 HDU 3572 Task Schedule(限流建图,超级源汇)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

  5. 图论--LCA--树上倍增法(在线)

    /* * LCA在线算法(倍增法) */ const int MAXN = 10010; const int DEG = 20; struct Edge { int to, next; } edge[ ...

  6. P5522 [yLOI2019] 棠梨煎雪

    updata on 2020.3.19 今天把博客从洛谷往博客园搬,图炸了 其实早就发现了,懒得管 那图其实就是一个用dev自带的调试功能调试时,RE了的报错 当时觉得很奇怪看不出是啥,现在再看已经觉 ...

  7. python(while 循环语句)

    一.循环语句 1.while 循环 当我们在 python 中需要重复执行一些动作的时候,这时我们就要用到循环 while 循环的结构,当条件成立的时候,就会执行里面的代码 while 循环不断的运行 ...

  8. Android APK 重签名

    对APK 进行在线 加固后,Apk体积一般会变大,而且Apk会无法直接安装,因为缺少了你的签名.是的,你需要对这个Apk进行重签名. 如何重签名 重签名的方法,一般来说,有两种,第一种是用JDK自带的 ...

  9. LoadRunner安装时提示缺少C++ 2005 SP1(x86)插件

    把安装文件里的所有中文文件重命名为英 文 名就ok!!! 把安装文件里的所有中文文件重命名为英 文 名就ok!!! 把安装文件里的所有中文文件重命名为英 文 名就ok!!! 重要的事情说三遍! 不插图 ...

  10. Vue列表实现滚动到指定位置样式改变

    这个需求大概是这样子: 我做的一个聊天Demo,在搜索框搜索用户,可以滚动到指定的用户.然后成选中状态. 这是目前状态,我搜索 南宫仆射 ,想要下面的用户列表直接滚动到 南宫仆射 并改变CSS样式. ...