Python基础学习11

函数

代码的一种组织形式,一个函数一般完成一项特定的功能

函数的使用:

  1. 函数需要先定义
  2. 使用函数,俗称调用

定义一个函数:

函数的定义部分不会被执行

  • def关键字,后跟一个空格
  • 函数名,自己定义,起名需要遵循便令命名规则,约定俗成,大驼峰命名只给类用
  • 后面括号和冒号不能省,括号内可以有参数
  • 函数内所有代码缩进

语法

def 函数名(参数列表):
    函数体

实例:

def func1():     # 定义函数,此处未传参数
    print(‘这就是函数!‘)
    print(‘我不玩了。‘)

func1()          # 函数的调用

输出如下:

这就是函数!
我不玩了。

函数的参数与返回值

参数

 负责给函数传递一些必要的数据或者信息

  • 形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,称为形参
  • 实参(实际参数): 在调用函数的时候输入的值

实例:

# 参数的定义与使用:
def func2(hello):        # hello为形参,无实质作用,仅代表调用时需要填入某一数据
    print(‘{},猜猜我是谁‘.format(hello))

func2(‘Hi‘)              # func()函数传入实参‘Hi‘,调用时 实参(Hi) 会代替 形参中的所有(hello)

# 如果写入形参,调用时未填入实参,会报错!
func2()

输出结果如下:

Hi,猜猜我是谁

TypeError: func2() missing 1 required positional argument: ‘hello‘       func2()缺少一个必需的位置参数:‘hello‘

返回值

 函数的执行结果

  • 使用return关键字
  • 如果没有return,默认返回一个None
  • 函数一旦执行return语句,则无条件返回,即结束函数的执行

实例:

# 函数返回值,一般用于函数末尾
def func2(one,two):
    num = one + two
    if num > 10:
        print(num,‘> 10‘)
        return ‘大于10‘
    else:
        print(num,‘< 10‘)
        return ‘小于10‘

    print(‘你猜我会被print出来吗?‘)        # 在pycharm中,该行会被底色标注

res = func2(5,8)
print(res)

输出结果如下:

13 > 10
大于10

# return后面的语句不会被打印出来

参数详解

参数分类

  • 普通参数
  • 默认参数
  • 关键字参数
  • 不定长参数

普通参数

  • 定义的时候直接定义变量名
  • 调用的时候直接把变量或者值放入指定位置
# 定义函数
def 函数名(参数1, 参数2,....):
    函数体

# 调用函数
函数名(value1, value2, .......)    # 严格按位置赋值

默认参数

  • 形参带有默认值
  • 调用时,如果没有对相应形参赋值,则使用默认值
# 定义函数
def 函数名(参数1, p2 = v2,....):
    函数体

# 调用1
函数名(value1)
# 调用2
函数名(value1, value2)

实例:

def func3(name,age = 18):    # 定义函数func3(),其中age参数默认为18
    print(‘My name is‘,name)
    print(age,‘years old‘)

func3(‘落晨‘)
print(‘-‘ * 33)     # 分隔符
func3(‘落晨‘,25)

输出结果如下:

My name is 落晨
18 years old
---------------------------------
My name is 落晨
25 years old

关键字参数

# 定义函数def 函数名(p1, p2, p3, ...):
    函数体
# 调用函数
函数名(p1=v1, p2=v2, p3=v3, ...)  # 

缺点:

  • 调用时会比较麻烦

优点:

  • 参数传输不易混淆;普通参数的形参、实参的位置必须一一对应,易出错
  • 使用关键字参数,无需考虑参数的位置

实例:

def func4(name,age):
    print(‘My name is‘,name)
    print(age,‘years old‘)

func4(age=18, name=‘落晨‘)

输出结果如下:

My name is 落晨
18 years old

不定长参数

撸代码时,可能调用时的实参比预留的形参更多,此时我们就需要用到不定长参数

# 定义函数def 函数名(*args):
    函数体
# 调用函数
函数名(v1, v2, v3, ...)
  • 参数名 args 不是必须这么写,但是,我们推荐直接用 args,约定俗成
  • 参数名 args 前需要由星号,加星号的参数会以元组的类型进行导入
  • 不定长参数可以和其他参数共存

实例:

def func5(*args):
    print(type(args))
    print(‘-‘ * 10)
    print(‘我要输出args:‘,args)

func5(‘落晨‘,18,‘不知道写啥了‘)

输出结果如下:

<class ‘tuple‘>
----------
我要输出args: (‘落晨‘, 18, ‘不知道写啥了‘)

不定长参数--关键字参数

  把关键字参数按字典格式存入收集参数

# 定义函数
def 函数名(**kwargs):    # 两个星号
    函数体

# 调用函数
函数名(p1=v1, p2=v2, p3=v3, ...)
  • kwargs一般约定俗成这样写
  • 调用的时候,把多余的关键字参数放入kwargs
  • 访问kwargs需要按字典格式访问

实例:

def func6(**kwargs):
    print(type(kwargs))
    print(‘-‘ * 10)
    print(‘我要输kwargs:‘,kwargs)

func6(name=‘落晨‘,age=18,other=‘不知道写啥了‘)

输出结果如下:

<class ‘dict‘>
----------
我要输kwargs: {‘name‘: ‘落晨‘, ‘age‘: 18, ‘other‘: ‘不知道写啥了‘}

不定长参数--混合调用

  • 收集参数,关键字参数,普通参数可以混合使用
  • 使用规则就是,普通参数和关键字参数优先
  • 定义的时候一般按照 普通参数,关键字参数,不定长参数tuple,不定长参数dict 的顺序
def func7(name, age, *args, hobby="None", **kwargs):
    print(‘Hi,everybody!‘)

    print(‘My name is {0}, {1} years old‘.format(name,age))

    print(‘I like animals, such as‘,args,‘and so on‘)

    if hobby == None:
        print(‘I have no hobbies.‘)
    else:
        print(‘I love to {0}.‘.format(hobby))

    print(‘And my other hobbies :‘,kwargs)

func7(‘落晨‘,18,‘monkeys‘,‘cats‘,‘dogs‘,hobby=‘sleeping‘,hobby2=‘music‘,hobby3=‘laughter‘)

输出结果如下:

Hi,everybody!

My name is 落晨, 18 years old

I like animals, such as (‘monkeys‘, ‘cats‘, ‘dogs‘) and so on

I love to sleeping.
And my other hobbies : {‘hobby2‘: ‘music‘, ‘hobby3‘: ‘laughter‘}

不定长参数--解包

  把参数放入list或者字典中,直接把list/dict中的值放入收集参数中

def func8(*args):
    for i in args:
        print(i)

l = [‘落晨‘, 18, ‘睡觉‘]
func8(l)
print(‘-‘ * 10)
func8(*l)        # 传参时加上 * 号,可以进行解包

输出结果如下:

[‘落晨‘, 18, ‘睡觉‘]  # 如果想将列表中的元素逐一打印出来,显然直接调用是行不通的 ---------- 落晨 18 睡觉

对dict类型进行解包,需要用两个星号

返回值

  • 函数和过程的区别

      有无返回值

  • 需要用return显示返回内容,
  • 如果没有返回,则默认返回None
  • 推荐写法,无论有无返回值,最后都要以return 结束
def func9():
    print("我这有返回值")
    return 1

def func10():
    print("我没有返回值")

f1 = func9()
print(f1)

print(‘-‘ * 15)

f2 = func10()
print(f2)

输出如下:

我这有返回值
1
---------------
我没有返回值
None

原文地址:https://www.cnblogs.com/wilson-5133/p/10356758.html

时间: 2024-08-30 01:28:39

Python基础学习11的相关文章

python基础学习11(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #执行环境 #可调用对象 """ 许多的python 对象都是我们所说的可调用的,即是任何能通过函数操作符“()”来调用的对象.要调用可调用对象, 函数操作符得紧跟在可调用对象之后.Python 有4

python基础学习11天,作业题

1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数. apple 10 3 tesla 100000 1 mac 3000 2 lenovo 30000 3 chicken 10 3 通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱. 2,有如下文件: ------- alex是老男孩python发起人,

Python 基础学习 网络小爬虫

<span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) imgli

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

python基础学习09(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #什么是函数 #就是引用,创建,使用 #例子 def foo(): print '233' foo() #返回与函数类型 def foo1():#是一个过程 print 'hello world!' foo1() foo

python基础学习2

python中的运算符 1.算术运算符:用来做算术运算的符号 ①.+ :求和,也可以做连接符 ②. - :求差 ③. * : 求积 ④. / :求商 ⑤.% :取余 ⑥.//  :取整 ⑦.**  :次方 注意:只能是数值 print(3*3) #求积结果:9 print(9/2) #相除结果:4.5 print(3**4) #3的4次方,结果:81 print(9//4) #小数部分直接丢掉,取整结果:2 print(13%3) #取余结果:1 运行结果是 9 4.5 81 2 1 比较运算符

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

Python基础学习(九)

Python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin