为什么这个递归函数返回 None ?

时间:2021-02-28 09:57:40

标签: python python-3.x

这是我的代码:

@Composablefun ChatList() {
ConstraintLayout {
    val (list, send) = createRefs()
    val viewModel = viewModel<MainViewModel>()
    val chatList by viewModel.messages.observeAsState(viewModel.messageList)
    var message by rememberSaveable { mutableStateOf("") }
    val state = rememberLazyListState()
    LazyColumn(state = state, modifier = Modifier.constrainAs(list) {
        top.linkTo(parent.top)
        bottom.linkTo(send.top)
        height = Dimension.fillToConstraints
    }) {
        items(chatList) { item ->
            when (item.isMe) {
                true -> ChatLayoutMe(item.message)
                false -> ChatLayout(item.message)
            }
        }
    }
    SendMessage(message = message, modifier = Modifier.constrainAs(send) {
        bottom.linkTo(parent.bottom)
    }) {
        message = it
    }
}}

@Composablefun SendMessage(message: String, modifier: Modifier, onMessageChange: (String) -> Unit) {
    ......
    Column(
        modifier = Modifier
            .clickable { viewModel.addMessage(message) }
        ......    
}

class MainViewModel : ViewModel() {

  val messages = MutableLiveData<List<ChatItem>>()

  val messageList = mutableListOf<ChatItem>().apply {
    ............
  }

  fun addMessage(message: String) {
     messageList.add(ChatItem(message, true))
     messages.value = messageList
  }
}

输出如下:

v = [1, 2, 3, 4, 5, 7]

def con(v, i):
    if i == len(v) : return print("ok")
    con(v, i + 1)

print(con(v, 1))

有人知道我怎么解决吗?

4 个答案:

答案 0 :(得分:2)

  1. print 返回 None 而您正在返回 print 的结果
  2. 你忘记在第 5 行返回,它应该是 return con(v, i + 1) 否则函数将返回 None

答案 1 :(得分:1)

您的代码会打印它,因为此代码的结果是 (?![·\u0907\u0909])[Ά-ώ],而调用 print 会返回 print(print("ok"))。您需要返回除 None 以外的其他内容。

答案 2 :(得分:0)

只需调用 con(v,1)。 无需使用 print(con(v,1))

答案 3 :(得分:0)

我理解你的问题,你想递归地获取向量的长度/转到向量的末尾。您需要将最内层递归循环的结果返回到最外层。因此,您需要返回内部结果:

v = [1, 2, 3, 4, 5, 7]
def con(v, i):
    if i == len(v):
        print("ok")
        return i
    return(con(v, i + 1))

print("Length of vector is: ",con(v, 1))

这会给:

ok
Length of vector is:  6