python(day006——函数1)

1.有参数函数

def count_letters(s):
    """此函数主要用于统计字符串中的字符个数"""
    result=0
    for i in s:
        result+=1
    return result

print(count_letters("hhuefla"))

print(count_letters("ehufe13jfef"))

练习:写一个函数,计算一个列表的数字类型的总和。

def count_list_letters(l):
    if not isinstance(l,list):  #判断传参是否为list。和java不一样,java传参有类型
        return 0  #return 0被执行的话,那么函数后面所有代码不执行
    result=0
    for i  in l:
        if isinstance(i,int):
            result+=i
    return result

list1=[1,5,"3",3,"34r4"]
list2=['helle',11,3,'eva','2']
print(count_list_letters(list1))  #1+5+3=9
print(count_list_letters(list2))  #11+3=14

重点:函数的内部,一定要判断传入参数的类型是否期望的类型。如果不是,想清楚怎么容错。如果是,再继续计算。

***命名参数:命名参数必须在非命名参数的后面,否则报错

>>> def print_str(a,b):
...    print (a)
...    print (b)
...
>>> print_str("x","y")
x
y
>>> print_str(b="x",a="y")
y
x
>>> print_str(b="x","y")  #报错原因:命名参数在前
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument

>>> print_str(a="x","y")  ##报错原因:命名参数在前
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument

>>> print_str("x",a="y")  #报错原因:重复传参
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: print_str() got multiple values for argument 'a'

>>> print_str("x",b="y")
x
y

2.无参数函数

def a():
    for i in range(5):
        print ("*"*(i+1))

a()
print("--------------")
print(a())

练习:写一个函数,返回五个随机字母。

import string
import random
def five_random_letters():
    """返回五个随机字母"""
    s=[]
    for i in range(5):
        s+=random.choice(string.ascii_letters)
    return("".join(s))

print(five_random_letters())

练习:通过参数控制返回长度

import string
import random
def random_letters(n):
    """返回n个随机字母"""
    if not isinstance(n,int):
        return ""
    s=[]
    for i in range(n):
        s+=random.choice(string.ascii_letters)
    return("".join(s))

print(random_letters(9))

 

#方法一:
import random
import string
def random_letters(n,type):
    """生成n个字母的随机字母
       type类型为:lower(小写)和upper(大写)"""
    if not isinstance(n,int):
        return ""
    if not(type =="lower" or type=="upper"):
        return ""
    if type=="lower":  #使用random.sample(),随机取n个值,返回list
        s=''.join(random.sample(string.ascii_lowercase,n))
    else:
        s=''.join(random.sample(string.ascii_uppercase,n))
    return s

print(random_letters(5,"lower"))
print(random_letters(7,"upper"))

#方法二:
import random
import string
def random_letters(n,type):
    """生成n个字母的随机字母
       type类型为:lower(小写)和upper(大写)"""
    if not isinstance(n,int):
        return ""
    if not(type =="lower" or type=="upper"):
        return ""
    s=''
    for i in range(n):
        if type=="lower":
            s+=chr(random.randint(97,122))
            #s += str(random.choice(string.ascii_lowercase))
        else:
            #s+=chr(random.randint(65,90))
            s += str(random.choice(string.ascii_uppercase))
    return s

print(random_letters(5,"lower"))
print(random_letters(7,"upper"))

3.内置函数

注:内建函数可以被覆盖,所以不要用内建函数命名

type(sum)
<class 'builtin_function_or_method'>
sum([1,23])
24
sum=1  #用内置函数命名,导致内置无法使用
sum([1,23])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'int' object is not callable
del sum  #恢复内置函数
sum([1,23])
24

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值