1.函数

函数就是一段具有特点功能的、可重用的语句组。

在Python中函数是以关键词 def 开头,空格之后连接函数名和圆括号(),最后一个冒号:结尾。

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

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

def strlen(s):
“”“ calulate the length of the string ”“”
len = 0
for x in s:
len = len + 1
return len

空函数

def null_fun():
"""This is a null fun"""
pass #pass语句什么都不做,实际上用来作为占位符

不写return与写入return None的效果相同,返回的只都是None          

只写一个return后面不加任何东西的时候与写return None的效果一样

如果在函数中有多个return,只执行第一个return。

多返回值函数

def mult_return():
name='Lily'
age=18
return name, age c= mult_return()
print(c)
# ('Lily', 18) n, a = mult_return()
print(n, a)
# Lily 18

当用一个变量接收返回值的时候,收到的是一个元组。这是因为在python中把用逗号分割的 多个值认为是一个元组。

当返回值有多个变量接收,那么返回值的个数应该和接收变量的个数完全一致。

函数调用

s='hello world!'
length=strlen(s) #调用上面写的strlen函数
print(length) #打印输出12

函数参数

函数的参数安装类型可以分为形参和实参(可变类型和不可变类型)。

不可变类型(如 整数、字符串、元组)传递的只是它的值,没有影响对象本身。如果在函数内部修改它的值,则是相当于新生成一个它。

可变类型则类似C++的引用传递,如列表,字典。则是将参数真正的传过去,修改后外部的参数变量也会受影响。

def invariableFun(i):
i=100 #参数为不可变类型,函数内部改变不会影响外部参数 a=1
print(a)
invariableFun(a)
print(a) #输出结果如下
1
1
def variantFun(list):
list.append('python') #参数为可变类型,函数内部改变会影响外部参数 mylist=['Lily', 'James']
print(mylist)
variantFun(mylist)
print(mylist) #输出结果如下
['Lily', 'James']
['Lily', 'James', 'python']

参数还可以分为必需参数,关键字参数, 默认参数和不定长参数。

1)必需参数

必要参数,即函数调用时必须要传的参数。

2)默认参数

必选参数在前,默认参数在后,否则python解释器会报错。

默认参数一定要指向不变对象!指向不变对象!指向不变对象!

def student(name, age=18):
print(name, age) student("Lily")
student("Lily", 20) #输出结果如下:
Lily 18
Lily 20

3)关键字参数

其实默认参数中已经出现了关键字参数!关键字参数就是在调用函数时,传入实参时带参数名,用这样的方式传入的实参叫做关键字参数。

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

def student(name, age=18):
print(name, age) student(age=22, name='Lily') #输出结果如下:
Lily 22

4)不定长参数

不定长参数又分为两种:

a.允许在调用时传入多个“非关键字”参数,python会将这些多出来的参数放入一个元组中。

def tupleVarArgs(arg1, arg2='default arg2', *other):
print('arg1: ', arg1)
print('arg2: ', arg2)
for x in other:
print('other arg: ', x) #调用输出结果如下:
tupleVarArgs('Lily')
arg1: Lily
arg2: default arg2 tupleVarArgs('Lily', 'Sandy')
arg1: Lily
arg2: Sandy tupleVarArgs('Lily', 'Sandy', 'James', 'Curry')
arg1: Lily
arg2: Sandy
other arg: James
other arg: Curry

b.允许在调用时传入多个“关键字”参数,python会将这些多出来的<参数名, 参数值>放入一个字典中。需要注意的是,关键字变量参数应该为函数定义的最后一个参数,带**。

def dictVarArgs(arg1, arg2='default arg2', **otherArgs):
print('arg1: ', arg1)
print('arg2: ', arg2)
for x in otherArgs.keys():
print('other arg: <%s : %s> '% (x, str(otherArgs[x]))) #调用输出结果如下:
dictVarArgs('Lily')
arg1: Lily
arg2: default arg2 dictVarArgs('Lily', 'Sandy')
arg1: Lily
arg2: Sandy dictVarArgs('Lily', 'Sandy', name1='James', name2='Curry')
arg1: Lily
arg2: Sandy
other arg: <name1 : James>
other arg: <name2 : Curry>

Python学习笔记4:函数的更多相关文章

  1. Python学习笔记之函数

    这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...

  2. 小甲鱼:Python学习笔记003_函数

    >>> # 函数>>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!") ...

  3. Python学习笔记 - day6 - 函数

    函数 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多次执行(这叫函数的调用).函数在编程语言中有基本分为:预 ...

  4. Python学习笔记系列——函数

    今年下半年的计划主要是Python和Mysql了,公司不方便看书和视频,就照着廖雪峰的Python网站开始看了.以下纯为个人笔记记录,若是想系统学习的小伙伴还是看这里的好一些,毕竟系统.https:/ ...

  5. Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

  6. python学习笔记(4)--函数

    1.函数 函数是指将一组语句的集合通过一个名字封装起来.要想执行这个函数,只需调用其函数名即可. 函数的特性: 1.减少重复代码 2.使程序变的课扩展 3.使程序变得易维护 语法定义: def pri ...

  7. Python学习笔记-Day3-python函数

    1.为什么要用函数? 提高代码重复利用率,减少代码冗余.封装模块化代码,便于调用 2.函数声明定义(注意:函数先声明后调用) 注意:函数的reture循环中的exit功能一样(函数不执行,终止) 函数 ...

  8. Python学习笔记11—函数

    建立第一个函数 /usr/bin/env Python #coding:utf-8 def add_function(a,b): c = a+b print c if __name__==" ...

  9. Python学习笔记7-把函数当参数传递、指定可变参数

    把函数当参数传递 # 函数参数传递 # 面向对象编程就是把对象传来传去 # 面向函数编程就是把函数传来传去 def mytest(num): return num * 2 # # 不光可以传递变量,还 ...

  10. Python学习笔记_week3_函数

    一.介绍 1.面向对象(华山派)--->类(独门秘籍)--->class(定义的关键字) 2.面向过程(少林派)--->过程--->def 3.函数式编程(逍遥派)---> ...

随机推荐

  1. 多测师讲解requests __中_高级讲师肖sir

    (1)生成报告 import unittest #导入单元测试框架 import requests #导入接口库 import time # #时间戳,导入time模块 from api.HTMLTe ...

  2. java流程控制之习题

     经过近段时间的学习,差不多也掌握了java的流程控制以及基本知识,下面就来一起练练习题吧,看能做出来几道. 第一道题:假设小明有100块钱,这时候小明去超市需要换零钱,超市提供的零钱有1元面值,2元 ...

  3. ubuntu基于VSCode的C++编程语言的构建调试环境搭建指南

    ubuntu基于VSCode的C++编程语言的构建调试环境搭建指南 首先安装g++ sudo apt install g++ 检查是否安装成功: 在插件栏安装插件c/c++.code runner: ...

  4. airtest本地连接和远程连接

    一.本地连接 # -*- coding: utf-8 -*-# from poco.drivers.android.uiautomation import AndroidUiautomationPoc ...

  5. 在WPF中一种较好的绑定Enums数据方法

    引言 在你使用wpf应用程序开发的时候,是否需要进行数据绑定到Enum数据呢?在这篇文章中,我将向你展示在WPF中处理Enum数据绑定的方法. 假设存在一个这样的Enum数据的定义,具体内容如下文代码 ...

  6. Windows搭建Hexo系统

    date: 2018-11-16 17:10:51 updated: 2018-11-16 20:04:43 1.安装Git 下载Windows下的Git客户端并安装,安装很简单,基本一路Next下去 ...

  7. Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7)

    前一节演示在docker中安装mssql,地址:Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7) 本节演示 .Net Core项目容 ...

  8. SP22343 Norma--序列分治

    Norma 传送门 题意简化: 定义一个区间的贡献为 \(max*min*len\),求给定序列中所有子区间的总贡献和 题解 考虑 \(O(n*log_2n)\) 的复杂度的做法 数据结构??? yz ...

  9. 请教:Effective Java 第120页,代码运行未重现报错

    在阅读<Effective Java 第二版>时,尝试编写重现第120页问题,发现未重现报错信息,可以正常运行并输出结果.有知道原因的请在评论中留言指导一下,谢谢!!! 问题如下

  10. python数据分析使用matplotlib绘图

    matplotlib绘图 关注公众号"轻松学编程"了解更多. Series和DataFrame都有一个用于生成各类图表的plot方法.默认情况下,它们所生成的是线形图 %matpl ...